Я просто могу ли иметь массив объектов MyObject
, а MyObject
получил переменную с именем isTrue
, за исключением того, что цикл был весь цикл, чтобы проверить, является ли весь объект в этом массиве истинным, что это короткие руки? Благодарю.
Можно ли проверить все значение в swift-массиве true, а не цикл за один раз?
Ответ 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