2016-02-28 83 views
0

我很難理解我應該如何使用可選變量。我是否必須在整個代碼中檢查零以防止崩潰?例如,使用此代碼瞭解可選的Swift 2.0

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

的book.publisher變量是可選的,因此它可能會或可能不會是零,當它不是零這個代碼工作完全正常,字符串追加並設置爲標籤的文本。但是,如果它是零,我會得到致命的錯誤。我是否真的需要在整個代碼中檢查零,以防止類似情況下的崩潰。如果是這樣,檢查零的正確方法是什麼?

+1

選配是斯威夫特的一個基本概念。這不僅僅是一個「如果讓」的陳述。請閱讀[Swift Language Guide]中的相應章節(https://developer.apple.com/library/ios/documentation/Swift/Conceptual/Swift_Programming_Language/TheBasics.html) – vadian

回答

0

解釋你所看到的錯誤,該if let結構的語法如下

if let (x: Type) = (expression of Type?) 

,如果你想檢查String?是否nil這意味着,你將有String左側(左側不再是可選的)。

但是,如果在左側寫String?,右側的表達式推斷爲String??

換句話說,self.book?.publisherString?類型(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