Swift:通过可选属性将可选模型数组减少为单个 Bool

标签 swift dictionary reduce flatmap

我刚刚了解了 swift 中的 map、flatMap 和 reduce 的奇妙世界,并且我已经在任何有意义的地方使用它,并有助于改进我的代码。

现在我遇到了一个非常特殊的问题,我想知道是否有使用map、flatMap和/或reduce的解决方案。

在我的模型类中,我有一个可选的其他模型数组。这些模型有一个可选的 Bool 属性。我现在想知道整个模型数组是否至少包含一个具有真实属性的模型。这就是我目前正在做的事情:

class ModelA{
  var bModels: [ModelB]?
}
class ModelB{
  var aBool: Bool?
}

func hasATrue(aModel: ModelA) {
    guard let bModels = aModel.bModels else { return false }
    for bModel in bModels {
        if bModel.aBool == true {
            return true
        }
    }
    return false
}

最佳答案

您可以通过可选链接、Array.contains(where:) 和 nil 合并在单个表达式中完成这一切。

func hasATrue(aModel: ModelA) {
    return aModel.bModels?.contains(where: { $0.aBool == true }) ?? false
}

关于Swift:通过可选属性将可选模型数组减少为单个 Bool,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43918284/

相关文章:

erlang - 静态分析与静态类型

ios - 快速动态的 UITableView 行高

ios - 使用 swift 发起 HTTP GET 请求

python - 当 values_list 有多个元素时从两个列表创建字典

c# - 这是在多线程方法中安全使用 Dictionary 吗?

javascript - reduce 函数不会将累加器初始化为零?

xcode - 如何更改 NSTableHeaderView 的背景颜色而不隐藏列标题?

swift - 将 Objective-C 框架导入 Swift 项目时在 Bridging Header 中获取 "file not found"

python - 优化Python在层次字典中的键搜索

python - 减少功能如何工作?