我无法理解应该如何使用可选变量。我是否必须在所有代码中检查 nil 以防止崩溃?例如,使用此代码
let pubHead = "Publisher: "
if let pubName : String? = self.book?.publisher {
self.publisherLabel?.text = pubHead+pubName!
}
book.publisher 变量是可选的,因此它可能为零,也可能不为零,当它不为零时,此代码工作得很好,字符串被附加并设置为标签的文本。但是,当它为零时,我会收到 fatal error 。我是否真的需要在所有代码中检查 nil 以防止在与此类似的情况下发生崩溃。如果是这样,检查 nil 的正确方法是什么?
最佳答案
为了解释您所看到的错误,if let
构造具有以下语法
if let (x: Type) = (expression of Type?)
这意味着如果你想检查是否 String?
是 nil
,您将有String
在左侧(左侧不再是可选的)。
但是,如果您写 String?
在左侧,右侧的表达式被推断为 String??
.
换句话说,self.book?.publisher
类型为String?
( Optional<String>
) 但将其放入:
if let pubName : String? = self.book?.publisher {
它将变成String??
(Optional<Optional<String>>
)。
if let
然后正确删除一级可选,您将得到 String?
.
显然,你想要的是
if let pubname: String = self.book?.publisher
或者让类型被推断
if let pubname = self.book?.publisher
关于ios - 了解 Swift 2.0 中的Optional,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35679149/