在項(xiàng)目開(kāi)發(fā)中遇到需要判斷String是否包含emoji表情的需求,要怎樣優(yōu)雅的判斷呢?
平時(shí)我們經(jīng)常會(huì)用到contains(element:)來(lái)判斷集合中是否包含某一元素(element需要遵循Equatable協(xié)議的):
let sayHello: String = "Hello world")
sayHello.contains("w") // true
let avengers: [string] = ["雷神", "綠巨人", "美國(guó)隊(duì)長(zhǎng)", "鋼鐵俠"]
avengers.contains("鋼鐵俠") // true
avengers.contains("超人") // false
但是emoji不是明確的某個(gè)值,該如何寫(xiě)呢,swift為我們提供了閉包contains(where predicate: (Character) throws -> Bool)
遍歷每個(gè)字符character,判斷每個(gè)字符是否為emoji
let family1 = "一家人???????????"
let family2 = "一家人"
let hasEmoji = family1.contains { (character) -> Bool in
if character.isEmoji {
return true
}
return false
}
// true
還是不夠優(yōu)雅?既然要優(yōu)雅,就需要簡(jiǎn)化
let hasEmoji = family1.contains{ $0.isEmoji} // true
let hasEmoji = family2.contains{ $0.isEmoji} // false
swift自動(dòng)為閉包提供參數(shù)名縮寫(xiě)功能,可以直接通過(guò)$0和$1等來(lái)表示閉包中的第一個(gè)第二個(gè)參數(shù),并且對(duì)應(yīng)的參數(shù)類型會(huì)根據(jù)函數(shù)類型來(lái)進(jìn)行判斷