我正在学习 Swift 并且正在测试以下代码
var value: String;
do {
value = try getValue()
} catch {
value = "Default Value"
}
可以缩短为
let value = (try? getValue()) ?? "Default Value"
它有效,但我觉得我可能缺少一个更明显的解决方案。
最佳答案
您的解决方案非常棒,而且非常优雅。
我想我们想避免在第一行说 var
并在稍后初始化变量。 一般,使用复杂初始化程序立即初始化值的方法是使用定义和调用结构:
let value: String = {
do {
return try getValue()
} catch {
return "Default Value"
}
}()
如果 catch
block 返回了您想捕获的 error
信息,您可能会想要这样做。
但是,在这种情况下,您忽略了错误的性质,您的表达式更加紧凑,并且完全按照您的意愿进行。 try?
将返回一个 Optional,如果我们成功,它将被解包,或者如果我们失败,将返回 nil
并导致替代值(“默认要使用的值"
)。
关于Swift 3 尝试默认值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42738755/