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

问题描述 投票:19回答:6

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

arrays swift swift2
6个回答
38
投票

更新: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)
}

16
投票

从Xcode 10和Swift 4.2开始,您现在可以将allSatisfy(_:)与谓词一起使用:

let conditions = [true, true, true]
if conditions.allSatisfy({$0 == true}) {
  // Do stuff
}

8
投票

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

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

3
投票

一个简单的方法是使用谓词:

let notAllTrue = contains(array) {
    item in item.isTrue == false
}

0
投票

尝试其中任何一个。

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")
        }

-1
投票

试试这个 -

println((boolArr.filter {!($0 as! MyObject).isTrue}).count)

-4
投票

如果您有一个如此定义的类:

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
© www.soinside.com 2019 - 2024. All rights reserved.