標籤:
Implicitly Unwrapped Optionals 隱式解析選項
如上所述。可選意味著常數或變數“沒有值”。通過可選if聲明來推斷是否存在值,假設有值析值。
有時候在程式架構中,第一次被賦值之後。能夠確定一個可選總會有值。
在這樣的情況下。每次都要推斷和解析可選值是很低效的,由於能夠確定它總會有值。
這樣的類型的可選被定義為隱式解析可選(implicitly unwrapped optionals)。
把想要用作可選的類型的後面的問號(String?)改成驚嘆號(String!)來聲明一個隱式解析可選。
當可選被第一次賦值之後就能夠確定之後一直有值的時候,隱式解析可選很實用。隱式解析可選主要被用在 Swift 中類的構造過程中,請參考類執行個體之間的迴圈強引用。
一個隱式解析可選事實上就是一個普通的可選,可是能夠被當做非可選來使用,並不須要每次都使用解析來擷取可選值。以下的範例展示了可選String和隱式解析可選String之間的差別:
let possibleString: String? = "An optional string."println(possibleString!) // requires an exclamation mark to access its value// prints "An optional string." let assumedString: String! = "An implicitly unwrapped optional string."println(assumedString) // no exclamation mark is needed to access its value// prints "An implicitly unwrapped optional string.
你能夠把隱式解析可選當做一個能夠自己主動解析的可選。
你要做的僅僅是聲明的時候把驚嘆號放到類型的結尾,而不是每次取值的可選名字的結尾。
注意:假設你在隱式解析可選沒有值的時候嘗試取值。會觸發執行時錯誤。和你在沒有值的普通可選後面加一個驚歎號一樣。
你仍然能夠把隱式解析可選當做普通可選來推斷它是否包括值:
if assumedString { println(assumedString)}// prints "An implicitly unwrapped optional string.
你也能夠在可選綁定中使用隱式解析可選來檢查並解析它的值:
if let definiteString = assumedString { println(definiteString)}// prints "An implicitly unwrapped optional string.
注意:假設一個變數之後可能變成nil的話請不要使用隱式解析選項。假設你需要推斷一個變數的生命週期是否nil如果。請使用普通的可選類型。
著作權聲明:本文部落格原創文章,部落格,未經同意,不得轉載。
Swift學習——Swift解釋特定的基礎(七)