检查字符串是否包含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。您可以mapnil 合并运算符 一起使用??来提供trueifmap返回的默认值,nil因为filternil

func process(items: [String], filter: String?) {
  for item in items {
    if filter.map(item.contains) ?? true {
      // process item
    }
  }
}


以上是检查字符串是否包含Swift中的可选字符串,但前提是它不是nil的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>