2015-05-28 29 views

回答

20

更新:的Xcode 8.2•斯威夫特3.0.2

您可以使用包含检查,如果它不存在虚假如下:

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) 
} 
+0

boolArray正存储一个对象,而不是纯布尔值。 – DNB5brims

+0

你知道这个和使用for循环之间的性能差异吗? –

+0

这将取决于你的阵列的大小和你在阵列上搜索的第一个元素的位置 –

-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 
1

一个简单的方法来做到这一点是使用谓词:

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

let allTrue =!contains(boolArray){item.isTrue } –

+0

@leonardoSavioDabus:但是对程序员更友好很多!s) –

+0

你可以使用一个隐含的arg'{!$ 0.isTrue}' – Alexander

-1

尝试这样做 -

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

@LeonardoSavioDabus他只是问是否有一个简写来做,读他的问题。 – kabiroberai

+0

而不是逐一循环 –

+0

@LeonardoSavioDabus他说,循环**整个**阵列 – kabiroberai

7

使用reduce功能的纯功能性的方法:

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

请记住:这不会短路。第一个项目可能会出现错误,但无论如何,它会继续浏览整个列表。 – Alexander

+0

这是正确的,谢谢你指出。因此不鼓励在显着大的阵列上使用。 – zvonicek

+0

有没有办法做到这一点,功能仍然短路?这使我觉得比所选答案更好,因为它更具概括性(例如,如果你想检查所有值是否等于'2',怎么办?) – Kevin

相关问题