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 }