我试图Bool
通过使用以下代码应用逻辑运算符OR(||
)来减少s 数组,但是我得到一个错误:
func reduceBools(values: [Bool]) -> Bool { return values.reduce(false, combine: ||) }
对成员'||'的模糊引用
类似于整数,代码就像一个魅力.
func reduceInts(values: [Int]) -> Int { return values.reduce(0, combine: +) }
我能够通过添加一个||
函数(下面的代码)或使用{ $0 || $1 }
闭包来使它工作,但我不喜欢这些方法,我宁愿只是传递运算符.
func ||(lhs: Bool, rhs: Bool) -> Bool { return lhs || rhs }
逻辑AND(&&
)运算符也会发生同样的事情.
如何在不使用上述黑客的情况下使其工作?
作为替代方案,您可以使用以下方法
// || func reduceBoolsOr(values: [Bool]) -> Bool { return values.contains(true) } // && func reduceBoolsAnd(values: [Bool]) -> Bool { return !values.contains(false) }
请注意,.reduce
它带有开销.如果最终结果是您的问题的重要性(而不是在此上下文中查询||
和&&
操作符的意外行为),那么上面的实用方法可能会有所帮助,即使它没有真正减少数组,但是产生由于布尔类型的简单性质,结果相同.