2014-09-24 112 views
4

這真令人費解:隱式展開的可選類型和類型本身之間有什麼區別?Swift中類型和明確展開類型之間的區別

例如,

var s:String! 
var s2: String 

是不是這兩個完全一樣的?它們代表了一個不能爲零的字符串,所以爲什麼我們需要!事情?

回答

7

的隱含解開可選的是可選,其實你可以指定一個nil

var s: String! = nil 

但聲明爲隱式展開,你就不必每次使用它的時候追加?,使,正如它的名字所述,它隱含地被解開,因爲它應該包含一個非零值。

後果:如果一個隱含解開爲零,很有可能當你用它在你的代碼會產生一個運行時異常 - 例如:

let s: String! = nil 
var s1: String = s // Execution was interrupted, reason: EXC_BAD_INSTRUCTION ... 

的問題可能會變成:爲什麼暗中展開自選存在?答案是他們需要Resolving Strong Reference Cycles Between Class Instances以及其他一些情況。

我會親自避免在我的代碼中聲明隱式展開的變量,除非我有一個非常好的理由(例如解決參考週期,如上所述)

相關問題