关于隐式解析可选类型


基本概念

所谓隐式解析可选类型,可以自动解析,使用的时候不需要显式的加感叹号来取值的可选类型。

和普通可选类型的差别

下面展示了可选类型 String 和隐式解析可选类型 String 之间的区别:

let possibleString: String? = "An optional string."
let forcedString: String = possibleString! // 需要感叹号来获取值

let assumedString: String! = "An implicitly unwrapped optional string."
let implicitString: String = assumedString  // 不需要感叹号”

除此之外和一般可选类型无差别。

例如:在没有值的时候,隐式解析操作仍然会触发运行时错误。这和普通可选类型在没值的时候后面加感叹号一样。

所以,在不确定是否有值的情况下,如果使用了隐式解析可选类型,仍然需要按照普通可选类型处理。例如,使用前判断是否为nil,或者在可选绑定中检查并解析它的值。

if assumedString != nil {
    print(assumedString)
}
// 输出 "An implicitly unwrapped optional string.

if let definiteString = assumedString {
    print(definiteString)
}
// 输出 "An implicitly unwrapped optional string.

什么情况下用隐式可选类型合适?

有些程序架构中,第一次赋值之后,可以确定以后这个可选类型总会有值。这种情况下,每次都要先判断是否有值再执行解析操作时非常低效的(因为可以确定它总会有值)。

当可选类型被第一次赋值之后就可以确定之后一直有值当时候,可以用隐式可选类型(实际应用中,隐式解析可选类型主要被用在swift的类的构造过程中)。

相反,如果一个变量之后可能变成nil,就不要使用隐式可选类型(在一个变量的生命周期中,如果需要判断是否为nil的话,使用普通可选类型就好)。

摘录: “The Swift Programming Language ”

知识共享许可协议本作品采用知识共享署名-非商业性使用 4.0 国际许可协议进行许可。
本站文章除注明转载/出处外,均为本站原创或翻译,请务必在遵守许可协议的前提下转载。
发布时间:2018-11-19 11:44:31 阅读:849 标签:技术Swift