这种方法足够快吗? (有一些我不喜欢的东西):
guard index ?? 1 > 0 else { ...
或另一个示例:
while i < index ?? i + 1 {
...
i += 1
}
答案 0 :(得分:1)
您是对的:
alg_wc_pif_enabled_local_1_1130
简洁明了,但这似乎不正确,因为您必须选择一个默认值才能使条件起作用,这似乎有点麻烦。
您可以完全按照自己的描述来写它:
guard index ?? 1 > 0 else { ...
这是有效且安全的,因为guard index == nil || index! > 0 { ...
语句会短路并防止强制展开崩溃,但是它仍然具有强制展开,某些工具(如SwiftLint)将其标记为问题。
第三种选择是使用||
的可选形式:
map
此处,仅当guard index.map({ $0 > 0 }) ?? true { ...
有值时才执行闭包,否则将返回index
。然后,nil
用于为??
情况提供true
的期望结果。它的优点是不使用力解开或kudget值,但是有点难以阅读。
与您的第二个示例一样,您的选择是:
选择一个默认值使其生效:
nil
检查while i < index ?? i + 1 { ...
,然后安全地强制展开:
nil
使用while index == nil || i < index! { ...
和map
:
??
坦率地说,我喜欢对while index.map({ i < $0 }) ?? true { ...
进行显式检查并解开安全部队,因为它可以准确传达您的意图。
注意::在进行等值比较时,您可以跳过强制展开。所以
nil
可以写为:
if index ?? 7 == 7 { ...
答案 1 :(得分:0)
if variable == nil {
//do something
} else if variable == (your condition) {
//do something
}
这就是你想要的吗?