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

我试图通过使用以下代码应用逻辑运算符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(&&)运算符也会发生同样的事情.

如何在不使用上述黑客的情况下使其正常工作?

作为替代方案,您可以使用以下方法
// ||
func reduceBoolsOr(values: [Bool]) -> Bool {
    return values.contains(true)
}

// &&
func reduceBoolsAnd(values: [Bool]) -> Bool {
    return !values.contains(false)
}

请注意.reduce comes with an overhead.如果最终结果是您的问题的重要性(而不是在此上下文中查询||和&&运算符的意外行为),那么上面的实用方法可能会有所帮助,甚至如果它没有真正减少数组,但由于布尔类型的简单性质而产生相同的结果.

相关文章

软件简介:蓝湖辅助工具,减少移动端开发中控件属性的复制和粘...
现实生活中,我们听到的声音都是时间连续的,我们称为这种信...
前言最近在B站上看到一个漂亮的仙女姐姐跳舞视频,循环看了亿...
【Android App】实战项目之仿抖音的短视频分享App(附源码和...
前言这一篇博客应该是我花时间最多的一次了,从2022年1月底至...
因为我既对接过session、cookie,也对接过JWT,今年因为工作...