關於 Swift 中的 Array.contains 方法

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
    
}
相關文章
相關標籤/搜索