我只是有可能有一个对象MyObject
的数组,并且MyObject
得到一个名为isTrue
的变量,除了循环整个数组以检查该数组中的所有对象是否为真,是否有任何短手这样做?谢谢。
更新:Xcode 8.2•Swift 3.0.2
您可以使用contains来检查它是否包含false,如下所示:
let boolsArray = [true,true,true,true]
if !boolsArray.contains(false) {
print(true)
}
class MyObject {
let isTrue: Bool
required init(_ isTrue: Bool) {
self.isTrue = isTrue
}
}
let myObj1 = MyObject(true)
let myObj2 = MyObject(true)
let myObj3 = MyObject(true)
let objects = [myObj1,myObj2,myObj3]
if !objects.contains{!$0.isTrue} {
print(true)
}
从Xcode 10和Swift 4.2开始,您现在可以将allSatisfy(_:)
与谓词一起使用:
let conditions = [true, true, true]
if conditions.allSatisfy({$0 == true}) {
// Do stuff
}
使用reduce
函数的纯功能方式:
let boolArray = [true,true,true,true]
let isAllTrue = boolArray.reduce(true, combine: {$0 && $1}) // true
一个简单的方法是使用谓词:
let notAllTrue = contains(array) {
item in item.isTrue == false
}
尝试其中任何一个。
1.
let names = ["Sofia", "Camilla", "Martina", "Mateo", "Nicolás"]
if names.allSatisfy({ $0.count >= 5 }){
print("true")
}else{
print("false")
}
2.
class SelectedModel {
var isSelected : Bool = false
required init(_ isSelected: Bool) {
self.isSelected = isSelected
}
}
let model1 = SelectedModel(true)
let model2 = SelectedModel(true)
let model3 = SelectedModel(true)
let modelArr = [model1,model2,model3]
if modelArr.allSatisfy({ $0.isSelected == true }){
print("true")
}else{
print("false")
}
试试这个 -
println((boolArr.filter {!($0 as! MyObject).isTrue}).count)
如果您有一个如此定义的类:
class Obj {
var isTrue: Bool
init(isTrue: Bool)
{
self.isTrue = isTrue
}
}
并且数组定义如下:
let array = [Obj(isTrue: true), Obj(isTrue: false), Obj(isTrue: true)]
然后,您可以使用此简写来检测isTrue字段中是否存在错误值:
array.filter{!$0.isTrue}.count > 0