Можно ли проверить все значение в swift-массиве true, а не цикл за один раз?

Я просто могу ли иметь массив объектов MyObject, а MyObject получил переменную с именем isTrue, за исключением того, что цикл был весь цикл, чтобы проверить, является ли весь объект в этом массиве истинным, что это короткие руки? Благодарю.

Ответ 1

update: 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)
}

Ответ 2

Начиная с Xcode 10 и Swift 4.2 теперь вы можете использовать allSatisfy(_:) с предикатом:

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

Ответ 3

Чистофункциональный способ с использованием функции reduce:

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

Ответ 4

Простым способом это использовать предикат:

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

Ответ 5

Попробуйте любой из них.

1.

    let names = ["Sofia", "Camilla", "Martina", "Mateo", "Nicolás"]

    if names.allSatisfy({ $0.count >= 5 }){
        print("true")
    }else{
        print("false")
    }

Ответ 6

Попробуйте сделать это -

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

Ответ 7

Если у вас есть класс, определенный как таковой:

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