检查变量是否为nil或满足某些条件

时间:2020-08-08 04:27:33

标签: swift

这种方法足够快吗? (有一些我不喜欢的东西):

guard index ?? 1 > 0 else { ...

或另一个示例:

while i < index ?? i + 1 {
    ...
    i += 1
}

2 个答案:

答案 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
}

这就是你想要的吗?