之类的区别是否存在差异?
if let error = error {
print(error.localizedDescription)
}
并检查它是否= nil
if error != nil {
print(error.localizedDescription)
}
如果我想检查错误是否有值?想想firebase创建用户功能。
答案 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
的属性(您的代码将无法编译,因为您还没有这样做)。