检查字符串是否包含Swift中的可选字符串,但前提是它不是nil
我想向处理字符串列表的函数添加一个可选的“过滤器”参数。如果过滤器是nil,我想处理所有字符串,否则我只想处理包含过滤器的字符串。大致:
func process(items: [String], filter: String?) {
for item in items {
if filter == nil || item.contains(filter) {
// Do something with item
}
}
}
类型检查器抱怨将过滤器传入,contains因为它是可选的,但contains需要一个String. 我当然可以强制展开,但这看起来很丑陋。上面的代码会在 Kotlin 中编译,因为它会巧妙地抛弃可选的,但是在 Swift 中表达它的惯用方式是什么?
谢谢!
回答
有一个mapon Optional仅在 optional 不是时才执行提供的闭包nil。您可以map与nil 合并运算符 一起使用??来提供trueifmap返回的默认值,nil因为filter是nil:
func process(items: [String], filter: String?) {
for item in items {
if filter.map(item.contains) ?? true {
// process item
}
}
}