我正在学习Swift,而且我正在测试以下代码
var value: String;
do {
value = try getValue()
} catch {
value = "Default Value"
}
可以缩短为
let value = (try? getValue()) ?? "Default Value"
它有效,但我觉得我可能错过了一个更明显的解决方案。
答案 0 :(得分:2)
你的解决方案非常棒,非常优雅。
我认为我们希望避免在第一行中说var
并稍后初始化变量。在 general 中,使用复杂初始化程序立即初始化值的方法是使用define-and-call构造:
let value: String = {
do {
return try getValue()
} catch {
return "Default Value"
}
}()
如果catch
块正在返回您要捕获的error
信息,您可能希望这样做。
然而,在这个的情况下,你忽略了错误的性质,你的表达式更紧凑,并且正是你想要做的。 try?
将返回一个Optional,如果我们成功,它将被解包,或者,如果我们失败,将返回nil
并导致使用备用值("Default Value"
)。