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的话,请使用普通可选类型

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