swift隱式解析可選類型

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的話,請使用普通可選類型

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章