2016-09-19 78 views
1

如果Bool數組中的元素全部爲true,則以下過濾器方法將返回true。Swift 3中的數組擴展名

print([false, true].filter({!$0}).isEmpty) // yields false 
print([true, true].filter({!$0}).isEmpty) // yields true 

如何創建在斯威夫特3陣列的擴展方法,將允許我代表這樣說:

[false, true].allElementsTrue() 

回答

0

這應該回答你的問題:

extension Collection where Iterator.Element == Bool { 

    var allElementsTrue: Bool { 
     return self.filter({!$0}).isEmpty 
    } 

} 

extension Collection where Iterator.Element == Bool { 

    func allElementsTrue() -> Bool { 
     return self.filter({!$0}).isEmpty 
    } 

} 

但是我更喜歡在沒有參數的情況下使用計算屬性。

注意:作爲替代,您也可以return !self.contains(false)更高效地獲得相同的結果(短路)。