了解Swift 2.0的可选性

时间:2016-02-28 05:38:20

标签: ios swift swift2

我无法理解如何使用可选变量。我是否必须在所有代码中检查nil以防止崩溃?例如,使用此代码

   let pubHead = "Publisher: "
   if let pubName : String? = self.book?.publisher {
            self.publisherLabel?.text = pubHead+pubName!
        }

book.publisher变量是可选的,所以它可能是也可能不是nil,当它不是nil时,这段代码完全正常,字符串被追加并设置为标签的文本。但是当它为零时我得到了致命的错误。我是否真的需要在我的所有代码中检查nil,以防止类似情况下的崩溃。如果是这样,检查零的正确方法是什么?

1 个答案:

答案 0 :(得分:0)

为了解释您看到的错误,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