1. 隱式解析可選類型
可選類型暗示了常量或者變量可以“沒有值”
把想要用作可選的類型的後面的問號(String?)
改成感嘆號(String!)
來聲明一個隱式解析可選類型
。與其在使用時把感嘆號放在可選類型的名稱的後面,你可以在定義它時,直接把感嘆號放在可選類型的後面。
當可選類型被第一次賦值之後就可以確定之後一直有值的時候,隱式解析可選類型非常有用。隱式解析可選類型主要被用在 Swift 中類的構造過程中.
一個隱式解析可選類型
其實就是一個普通的可選類型
,但是可以被當做非可選類型
來使用,並不需要每次都使用解析
來獲取可選值
。下面的例子展示了可選類型 String
和隱式解析可選類型 String
之間的區別:
let possibleString: String? = "An optional string."
let forcedString: String = possibleString! // 需要感嘆號來獲取值
let assumedString: String! = "An implicitly unwrapped optional string."
let implicitString: String = assumedString // 不需要感嘆號
你可以把隱式解析可選類型
當做一個可以自動解析
的可選類型
。當你使用一個隱式解析可選值
時,Swift
首先會把它當作普通的可選值
;如果它不能被當成可選類型
使用,Swift
會強制解析
可選值。在以上的代碼中,可選值 assumedString
在把自己的值賦給 implicitString
之前會被強制解析
,原因是 implicitString
本身的類型是非可選類型的 String
。在下面的代碼中,optionalString
並沒有顯式的數據類型
。那麼根據類型推斷
,它就是一個普通的可選類型
。
let optionalString = assumedString
// optionalString 的類型是 "String?",assumedString 也沒有被強制解析。
如果你在
隱式解析可選類型
沒有值的時候嘗試取值
,會觸發運行時錯誤
。和你在沒有值的普通可選類型後面加一個感嘆號一樣。
你可以把隱式解析可選類型
當做普通可選類型
來判斷它是否包含值
:
if assumedString != nil {
print(assumedString!)
}
// 輸出“An implicitly unwrapped optional string.”
你也可以在可選綁定中
使用隱式解析可選類型
來檢查並解析它的值:
if let definiteString = assumedString {
print(definiteString)
}
// 輸出“An implicitly unwrapped optional string.”
注意
如果一個變量之後可能變成nil
的話請不要使用隱式解析可選類型
。如果你需要在變量的生命週期中
判斷是否是nil
的話,請使用普通可選類型
。