这是否可以检查swift数组中的所有值是否为真而不是逐个循环?

DNB*_*ims 22 arrays swift

我只是有可能有一个对象数组MyObject,并且MyObject得到一个被调用的变量isTrue,除了循环整个数组以检查该数组中的所有对象是否为真,是否有任何短手这样做?谢谢.

Leo*_*bus 39

更新:Xcode 8.2•Swift 3.0.2

您可以使用contains来检查它是否包含false,如下所示:

let boolsArray = [true,true,true,true]

if !boolsArray.contains(false) {
    print(true)
}
Run Code Online (Sandbox Code Playgroud)
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)
}
Run Code Online (Sandbox Code Playgroud)


ban*_*ang 16

对于Xcode 10Swift 4.2, 您现在可以使用allSatisfy(_:)谓词:

let conditions = [true, true, true]
if conditions.allSatisfy({$0 == true}) {
  // Do stuff
}
Run Code Online (Sandbox Code Playgroud)

  • == true是多余的,如果condition.allSatisfy({$ 0}){` (2认同)

zvo*_*cek 8

使用reduce函数的纯功能方式:

let boolArray = [true,true,true,true]
let isAllTrue = boolArray.reduce(true, combine: {$0 && $1}) // true
Run Code Online (Sandbox Code Playgroud)

  • 请记住:这不会短路.可以在第一个项目上找到false,但无论如何它都会继续遍历整个列表. (8认同)