關於 Swift 中的 Array.contains 方法


Swift 2.0 中對語言進行了又一次的改進,這次將整個語言變得更加面向對象化,比如在 Swift 1.x 中如果要判斷某個元素是否在數組中,就需要用到 contains 函數:

if contains(array, value) {
  ...
}

而在 Swift 2.0 中,contains 被作為 Array 的一方法來使用了。所以我們只需這樣調用即可:

if array.contains(value) {
  ...
}

這種方式,更加具有面向對象思維。也更符合廣大開發者朋友的習慣~

另外,contains 函數還提供了另外一種參數重載,也可以叫做 predicate 模式,方法簽名如下:

contains(predicate: (Self.Generator.Element) throws -> Bool )

這個方法接受一個閉包類型的參數,這個閉包的作用就是用來判斷某個元素是否符合我們的判斷條件,然后返回相應的 Bool 值。比如這樣:


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 了。

這個例子雖然簡單,但展示了 Swift 閉包和語法的靈活性。

接下來,咱們再看一個更貼近我們應用的例子,比如我們在維護一個圖書列表,我們想知道這個列表中有沒有圖書有更新章節,可以用一個簡單的模型來表示圖書:


class Book {
    
    var title:String?
    var hasUpdate:Bool = false
    
    
    init(title:String, hasUpdate:Bool) {
        
        self.title = title
        self.hasUpdate = hasUpdate
        
    }
    
}

然后,我們就可以用 predicate 的方式來直接進行判斷了,不在需要 for 循環了:

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
    
}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM