如果是Swift中的语句和选项

时间:2017-04-04 23:50:57

标签: swift

之类的区别是否存在差异?
if let error = error {
    print(error.localizedDescription)
}

并检查它是否= nil

if error != nil {
    print(error.localizedDescription)
}

如果我想检查错误是否有值?想想firebase创建用户功能。

2 个答案:

答案 0 :(得分:2)

if let语句允许您将error的值绑定到变量(如果它是非nil)并在块中使用它。如果maybeError的类型为Error?,则执行以下操作:

if let error = maybeError {
    /* block contents */
}

块中error的类型将为Error - 即:它不再是可选项。如果您只是使用if进行零检查,则error仍将在该区块中为Error?类型。因此,实际上与您的第一个代码段相同的代码将是:

if error != nil {
    print(error!.localizedDescription)
}

(您的第二个片段,因为您正在尝试获取localizedDescription对象的Error?变量,但它没有这样的属性,因此无法编译。

顺便说一下,如果你以前没见过它,!.就是解包操作符。如果对象是非零的,它会在对象上运行方法,但如果对象为nil,它会崩溃。在这种情况下,您通常知道它不会崩溃。 (但这可能实际上并不安全,具体取决于您在何处以及如何使用它 - 请查看@ rmaddy的评论)

答案 1 :(得分:0)

首先,error现在是非可选类型,因此您可以使用.。这也是惯用的 - 它更清楚地显示了你想要做的事情。

在第二种情况下,您需要使用?.来查看error的属性(您的代码将无法编译,因为您还没有这样做)。