可選類型暗示了常量或者變量可以“沒有值”恼琼。可選可以通過 if 語句來判斷是否有值屏富,如果有值的話可以通過可選綁定來解析值晴竞。
有時候在程序架構(gòu)中,第一次被賦值之后狠半,可以確定一個可選類型總會有值噩死。在這種情況下颤难,每次都要判斷和解析可選值是非常低效的,因?yàn)榭梢源_定它總會有值已维。
這種類型的可選狀態(tài)被定義為隱式解析可選類型(implicitly unwrapped optionals)行嗤。把想要用作可選的類型的后面的問號(String?)改成感嘆號(String!)來聲明一個隱式解析可選類型
當(dāng)可選類型被第一次賦值之后就可以確定之后一直有值的時候,隱式解析可選類型非常有用垛耳。
一個隱式解析可選類型其實(shí)就是一個普通的可選類型栅屏,但是可以被當(dāng)做非可選類型來使用,并不需要每次都使用解析來獲取可選值
let possibleString: String? = "An optional string."
let forcedString: String = possibleString! // 需要感嘆號來獲取值
let assumedString: String! = "An implicitly unwrapped optional string."
let implicitString: String = assumedString // 不需要感嘆號
你可以把隱式解析可選類型當(dāng)做一個可以自動解析的可選類型堂鲜。你要做的只是聲明的時候把感嘆號放到類型的結(jié)尾栈雳,而不是每次取值的可選名字的結(jié)尾。
如果你在隱式解析可選類型沒有值的時候嘗試取值缔莲,會觸發(fā)運(yùn)行時錯誤甫恩。和你在沒有值的普通可選類型后面加一個驚嘆號一樣。
你仍然可以把隱式解析可選類型當(dāng)做普通可選類型來判斷它是否包含值:
if assumedString != nil {
print(assumedString)
}
你也可以在可選綁定中使用隱式解析可選類型來檢查并解析它的值:
// 輸出 "An implicitly unwrapped optional string."
if let definiteString = assumedString {
print(definiteString)
}
// 輸出 "An implicitly unwrapped optional string."