Swift:通过可选 属性 将可选的模型数组减少为单个 Bool
Swift: Reduce optional array of models to single Bool by optional property
我刚刚在 swift 中了解了 map、flatMap 和 reduce 的美妙世界,我已经在任何有意义的地方使用它并帮助改进我的代码。
现在我遇到了一个非常特殊的问题,我想知道是否有使用 map、flatMap 解决这个问题的方法 and/or reduce。
在我的模型 class 中,我有一个可选的其他模型数组。这些模型有一个可选的 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:)
和零合并在单个表达式中完成所有这些操作。
func hasATrue(aModel: ModelA) {
return aModel.bModels?.contains(where: { [=10=].aBool == true }) ?? false
}
根据对我的问题的评论,这就是解决问题的方法:
return aModel.bModels?.contains(where: { [=10=].aBool == true }) ?? false
或者
return aModel.bModels?.contains(where: { [=11=].aBool == true }) == true
一个比另一个好吗?我不知道。也许对语言的实现方式有深入了解的 Swift 专家可以分辨出哪个 faster/more 有效,但对我来说,该方法很少被调用,因此处理时间不是问题,但这是另一个话题.
感谢所有评论者。我对 map、flatMap 和 reduce 如此着迷,以至于我没有看到明显的东西(我也不知道你可以将闭包传递给 swift 中的 contains 函数)。一天比一天,我越来越喜欢这门语言。
每次要为Android编写Java代码时,我都快哭了
我刚刚在 swift 中了解了 map、flatMap 和 reduce 的美妙世界,我已经在任何有意义的地方使用它并帮助改进我的代码。
现在我遇到了一个非常特殊的问题,我想知道是否有使用 map、flatMap 解决这个问题的方法 and/or reduce。
在我的模型 class 中,我有一个可选的其他模型数组。这些模型有一个可选的 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:)
和零合并在单个表达式中完成所有这些操作。
func hasATrue(aModel: ModelA) {
return aModel.bModels?.contains(where: { [=10=].aBool == true }) ?? false
}
根据对我的问题的评论,这就是解决问题的方法:
return aModel.bModels?.contains(where: { [=10=].aBool == true }) ?? false
或者
return aModel.bModels?.contains(where: { [=11=].aBool == true }) == true
一个比另一个好吗?我不知道。也许对语言的实现方式有深入了解的 Swift 专家可以分辨出哪个 faster/more 有效,但对我来说,该方法很少被调用,因此处理时间不是问题,但这是另一个话题.
感谢所有评论者。我对 map、flatMap 和 reduce 如此着迷,以至于我没有看到明显的东西(我也不知道你可以将闭包传递给 swift 中的 contains 函数)。一天比一天,我越来越喜欢这门语言。
每次要为Android编写Java代码时,我都快哭了