【发布时间】:2020-01-17 05:43:33
【问题描述】:
如何在 Swift 中进行可选绑定并检查是否有否定结果?比如说我有一个可选的视图控制器,我想延迟加载。到了要用的时候,我想检查一下是不是nil,还没做完就初始化一下。
我可以这样做:
if let vc = viewController? {
// do something with it
} else {
// initialize it
// do something with it
}
但这很笨拙且效率低下,并且需要我将“用它做点什么”代码放在那里两次或将其埋在闭包中。从 objC 经验中改进这一点的明显方法是这样的:
if !(let vc = viewController?) {
// initialize it
}
if let vc = viewController? {
// do something with it
}
但这会给您带来“模式变量绑定不能出现在表达式中”错误,这告诉我不要将绑定放在括号内并尝试将其作为表达式进行评估,这当然正是我的意思尝试做...
或者另一种写出实际有效的方法是:
if let vc = viewController? {
} else {
// initialize it
}
if let vc = viewController? {
// do something with it
}
但这是……愚蠢……因为没有更好的词。一定有更好的办法!
如何进行可选绑定并默认检查是否有否定结果?确定这是一个常见的用例吗?
【问题讨论】:
-
你可能正在寻找 Swift 中关键而优秀的 "guard" 成语......stackoverflow.com/a/32004029/294884
-
是的,Swift 2 添加了 guard,完美解决了这个问题。
-
艾瑞克,呸,我们在7年后彻底解决了这个问题! :) :)
标签: swift