如何对可以为零的值使用OR

  • 本文关键字:OR swift
  • 更新时间 :
  • 英文 :


这是非常基本的,但我有点困惑为什么我的代码不能工作。我有一个user,它有一个可选的username,我正在尝试检查emailusername是否包含我的搜索查询

struct ChatUser: Codable, Identifiable {
let email: String    
var username: String?
}
@State var user: ChatUser
if user.email.lowercased().contains(search.lowercased()) || 
user.username.lowercased().contains(search.lowercased()) {...}

如果我打开user.username!,但由于打开零值,我的应用程序崩溃,这是有效的。如何检查user.username != nil,然后在if检查中强制展开?

一次又一次地调用lowercased()是不必要的开销。

但对于给定的语法,这是快速的方式

if user.email.lowercased().contains(search.lowercased()) || 
user.username?.lowercased().contains(search.lowercased()) == true {...}

如果用户名为nil,则可选链接表达式立即返回nil

然而,range(of:options:可以处理可选的情况

if user.email.range(of: search, options: .caseInsensitive) != nil ||
user.username?.range(of: search, options: .caseInsensitive) != nil {
}

您可以使用nil-coalescing(??)来打开您的可选值。

if user.email.lowercased().contains(search.lowercased()) || 
user.username?.lowercased().contains(search.lowercased()) ?? false {
}
if user.email.lowercased().contains(search.lowercased()) || 
(user.username.map { $0.lowercased().contains(search.lowercased()) } ?? false) {
}

相关内容

  • 没有找到相关文章

最新更新