我试图通过使用以下代码应用逻辑运算符 OR (||
) 来减少 Bool
的数组,但是我得到一个错误:
func reduceBools(values: [Bool]) -> Bool {
return values.reduce(false, combine: ||)
}
Ambiguous reference to member '||'
类似于整数,代码就像一个魅力。
func reduceInts(values: [Int]) -> Int {
return values.reduce(0, combine: +)
}
我能够通过添加 ||
函数(下面的代码)或使用 { $0 || 使其工作$1 }
闭包,但我不喜欢这些方法,我宁愿简单地传递运算符。
func ||(lhs: Bool, rhs: Bool) -> Bool {
return lhs || rhs
}
逻辑 AND (&&
) 运算符也会发生同样的事情。
如何在不使用上述 hack 的情况下使其工作?
最佳答案
作为替代方案,您可以使用以下方法
// ||
func reduceBoolsOr(values: [Bool]) -> Bool {
return values.contains(true)
}
// &&
func reduceBoolsAnd(values: [Bool]) -> Bool {
return !values.contains(false)
}
注意 .reduce
comes with an overhead .如果最终结果是您问题的重要性(而不是在这种情况下询问 ||
和 &&
运算符的意外行为),那么也许上面的实用方法会有所帮助,即使它并没有真正减少数组,但是由于 bool 类型的简单性质而产生相同的结果。
关于ios - 在 reduce 中使用逻辑运算符作为组合闭包,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34699576/