在项目开发中遇到需要判断String是否包含emoji表情的需求,要怎样优雅的判断呢?
平时我们经常会用到contains(element:)
来判断集合中是否包含某一元素(element需要遵循Equatable
协议的):
let sayHello: String = "Hello world")
sayHello.contains("w") // true
let avengers: [string] = ["雷神", "绿巨人", "美国队长", "钢铁侠"]
avengers.contains("钢铁侠") // true
avengers.contains("超人") // false
但是emoji不是明确的某个值,该如何写呢,swift为我们提供了闭包contains(where predicate: (Character) throws -> Bool)
遍历每个字符character
,判断每个字符是否为emoji
let family1 = "一家人👨👩👧👦"
let family2 = "一家人"
let hasEmoji = family1.contains { (character) -> Bool in
if character.isEmoji {
return true
}
return false
}
// true
还是不够优雅?既然要优雅,就需要简化
let hasEmoji = family1.contains{ $0.isEmoji} // true
let hasEmoji = family2.contains{ $0.isEmoji} // false
swift自动为闭包提供参数名缩写功能,可以直接通过$0
和$1
等来表示闭包中的第一个第二个参数,并且对应的参数类型会根据函数类型来进行判断
网友评论