关于 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
    
}
相关文章
相关标签/搜索