ios - 在 reduce 中使用逻辑运算符作为组合闭包

标签 ios swift swift2 closures logical-operators

我试图通过使用以下代码应用逻辑运算符 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/

相关文章:

iOS App 架构如何实现 MVVM、网络和蓝牙?

ios - 从我的联系人中执行调用

ios - 在 UIScrollview 中更新 subview 时滚动期间轻微卡住

ios - .enumerateGroupsWithTypes block 停止参数 Swift (Xcode 6 beta 5)

swift - Swift 中类似控制中心的滑动 View 实现

swift - 根据参数调用不同的函数

swift - 如何让 Swift-Wkwebview 自动填写用户名和密码?

Swift:带有 Map 的 NSCountedSet

ios - -[UIViewController tableView :numberOfRowsInSection:]: unrecognized selector sent to instance

ios - 从协议(protocol)扩展调用选择器