在Swift中在if语句中使用let

3
关键字let用于在Swift中定义常量。但我发现let被用于if语句中,我一直在想这样做的好处是什么。例如,在以下代码中:
if !session.setActive(false, error: &error) {
    println("session.setActive fail")
    if let e = error {
        println(e.localizedDescription)
        return
    }
}

为什么在语句 if let e = error 中要用 let 测试 error?这与 IT 技术有关。

我明白测试 error 的必要性,以确保我们可以获得 .localizedDescription,但是我不明白为什么我们不能直接这样做:

    if error {
        println(error.localizedDescription)

除了这个例子之外,我还注意到许多其他的if语句中也使用了let。这样做有什么优点呢?我很想知道背后的思考过程。

最后,var能否以同样的方式在if语句中使用?

2个回答

5
这个过程被称作可选绑定。你使用它来检查可选项(在你的例子中是error)是否包含值,如果有,就将该值分配给绑定的常量(在你的例子中是e)。
你也可以使用var而不是let将值绑定到变量而不是常量:
if var error = error {
    // Do something with error
    println(error.localizedDescription)
    return
}

请注意,我在上面的片段中使用了相同的名称(error)。在 if 块内,error 不再是可选类型。

2
建议阅读:可选绑定 - Antonio
1
我认为OP的问题在于我们已经有了一个完美的变量(error),那么为什么要将其重新绑定为e... - Shai
为什么我们要写 if let e=error 而不是 if error! 呢?在 if 语句中,为什么 let e=errorerror! 更安全呢? - Jimmery
@Jimmery 如果你使用 error! 并且可选项没有值,那么就会发生运行时错误。这正是我们试图避免的。 - Marius Schulz

2

同样,您也可以使用相同的名称:

 if let error = error {
     println(error.localizedDescription)
     return
 }

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接