Swift 3尝试默认值

时间:2017-03-11 18:07:38

标签: swift

我正在学习Swift,而且我正在测试以下代码

var value: String;
do {
  value = try getValue()
} catch {
  value = "Default Value"
}

可以缩短为

let value = (try? getValue()) ?? "Default Value"

它有效,但我觉得我可能错过了一个更明显的解决方案。

1 个答案:

答案 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")。