Swift 2.0 中对语言进行了又一次的改进,此次将整个语言变得更加面向对象化,好比在 Swift 1.x 中若是要判断某个元素是否在数组中,就须要用到 contains
函数:数组
if contains(array, value) { ... }
而在 Swift 2.0
中,contains
被做为 Array
的一方法来使用了。因此咱们只需这样调用便可:闭包
if array.contains(value) { ... }
这种方式,更加具备面向对象思惟。也更符合广大开发者朋友的习惯~app
另外,contains 函数还提供了另一种参数重载,也能够叫作 predicate
模式,方法签名以下:函数
contains(predicate: (Self.Generator.Element) throws -> Bool )
这个方法接受一个闭包类型的参数,这个闭包的做用就是用来判断某个元素是否符合咱们的判断条件,而后返回相应的 Bool 值。好比这样:code
let numbers = [1,2,3,4,5,6,7]; numbers.contains { (element) -> Bool in if element % 3 == 0 { return true }else { return false } }
上面的代码中,咱们声明了一个数组,里面包含了 7 个数字,而后咱们调用 contains
方法,传入了一个 predicate
, 里面进行了一个简单的判断,若是数组中,有 3 的倍数,就返回 true
。对象
很显然,咱们的数组中的, 3 和 6 都是符合条件的数字,因此这个 contains
调用的返回值确定就是 true 了。element
这个例子虽然简单,但展现了 Swift
闭包和语法的灵活性。开发
接下来,我们再看一个更贴近咱们应用的例子,好比咱们在维护一个图书列表,咱们想知道这个列表中有没有图书有更新章节,能够用一个简单的模型来表示图书:it
class Book { var title:String? var hasUpdate:Bool = false init(title:String, hasUpdate:Bool) { self.title = title self.hasUpdate = hasUpdate } }
而后,咱们就能够用 predicate
的方式来直接进行判断了,不在须要 for
循环了:class
var bookList:[Book] = [Book]() bookList.append(Book(title:"Objective-C", hasUpdate:false)) bookList.append(Book(title:"Cocoa", hasUpdate:false)) bookList.append(Book(title:"Swift", hasUpdate:true)) bookList.contains { (book: Book) -> Bool in return book.hasUpdate }