swift – 在reduce中使用逻辑运算符作为组合闭包
发布时间:2020-12-14 05:45:08 所属栏目:百科 来源:网络整理
导读:我试图通过使用以下代码应用逻辑运算符OR(||)来减少Bool数组,但是我得到一个错误: func reduceBools(values: [Bool]) - Bool { return values.reduce(false,combine: ||)} Ambiguous reference to member ‘||’ 类似于整数,代码就像一个魅力. func reduceI
我试图通过使用以下代码应用逻辑运算符OR(||)来减少Bool数组,但是我得到一个错误:
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 comes with an overhead.如果最终结果是您的问题的重要性(而不是在此上下文中查询||和&&运算符的意外行为),那么上面的实用方法可能会有所帮助,甚至如果它没有真正减少数组,但由于布尔类型的简单性质而产生相同的结果. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |