以前在 Swift 2.2 中我能够做到:
extension _ArrayType where Generator.Element == Bool{
var allTrue : Bool{
return !self.contains(false)
}
}
用 .allTrue
扩展了 [Bool]
。例如
[true, true, false].allTrue == false
但是在 Swift 3.0 中我得到了这个错误:
undeclared type
_ArrayType
所以我尝试将其切换为 Array
并使用新关键字 Iterator
extension Array where Iterator.Element == Bool
var allTrue : Bool{
return !self.contains(false)
}
}
但是我得到了一个不同的错误,提示我强制元素是非通用的
Same-type requirement makes generic parameter 'Element' non-generic
我也试过这个 2 years old post 中的解决方案但无济于事。
那么如何在 Swift 3 中扩展像 Bool 这样的基本类型数组呢?
最佳答案
只需扩展集合或序列
extension Collection where Element == Bool {
var allTrue: Bool { return !contains(false) }
}
编辑/更新:
Xcode 10 • Swift 4 或更高版本
可以使用Swift 4或更高版本的收集方式allSatisfy
let alltrue = [true, true,true, true,true, true].allSatisfy{$0} // true
let allfalse = [false, false,false, false,false, false].allSatisfy{!$0} // true
extension Collection where Element == Bool {
var allTrue: Bool { return allSatisfy{ $0 } }
var allFalse: Bool { return allSatisfy{ !$0 } }
}
测试 Playground :
[true, true, true, true, true, true].allTrue // true
[false, false, false, false, false, false].allFalse // true
关于arrays - 在 Swift 3 中扩展类型化数组(基本类型如 Bool)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39628695/