ios - 了解 Swift 2.0 中的Optional

标签 ios swift swift2

我无法理解应该如何使用可选变量。我是否必须在所有代码中检查 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/

相关文章:

ios - Xcode 可以在 XIB 中查找/替换吗?

ios - 有没有办法限制 NSNotification?

iphone - 我可以使用UIBezierPath在UITableView部分周围绘制阴影图像吗?

ios - 如何在 Alamofire 中使用 header 中的 Token 和基本身份验证发出请求?

ios - AFNetworking 后置参数未编码

ios - 从异步调用返回图像

swift - 如何向 ScrollView 添加背景并让它重复到最后?

Xcode 7 缺少 setter 或实例变量

ios - 重命名文件而不输入文件扩展名

ios - 在 Swift 中转义字符串