4
這真令人費解:隱式展開的可選類型和類型本身之間有什麼區別?Swift中類型和明確展開類型之間的區別
例如,
var s:String!
var s2: String
是不是這兩個完全一樣的?它們代表了一個不能爲零的字符串,所以爲什麼我們需要!事情?
這真令人費解:隱式展開的可選類型和類型本身之間有什麼區別?Swift中類型和明確展開類型之間的區別
例如,
var s:String!
var s2: String
是不是這兩個完全一樣的?它們代表了一個不能爲零的字符串,所以爲什麼我們需要!事情?
的隱含解開可選的是可選,其實你可以指定一個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以及其他一些情況。
我會親自避免在我的代碼中聲明隱式展開的變量,除非我有一個非常好的理由(例如解決參考週期,如上所述)