Swift学习——Swift解释特定的基础(七)

Implicitly Unwrapped Optionals    隐式解析选项

如上所述。可选意味着常数或变量“没有值”。通过可选if声明来推断是否存在值,假设有值析值。

有时候在程序架构中,第一次被赋值之后。能够确定一个可选总会有值。

在这样的情况下。每次都要推断和解析可选值是很低效的,由于能够确定它总会有值。

这样的类型的可选被定义为隐式解析可选(implicitly unwrapped optionals)。

把想要用作可选的类型的后面的问号(String?)改成感叹号(String!)来声明一个隐式解析可选。

当可选被第一次赋值之后就能够确定之后一直有值的时候,隐式解析可选很实用。隐式解析可选主要被用在 Swift 中类的构造过程中,请參考类实例之间的循环强引用。

一个隐式解析可选事实上就是一个普通的可选,可是能够被当做非可选来使用,并不须要每次都使用解析来获取可选值。以下的样例展示了可选String和隐式解析可选String之间的差别:

let possibleString: String?

= "An optional string."
println(possibleString!) // requires an exclamation mark to access its value
// prints "An optional string." let assumedString: String! = "An implicitly unwrapped optional string."
println(assumedString) // no exclamation mark is needed to access its value
// prints "An implicitly unwrapped optional string.

你能够把隐式解析可选当做一个能够自己主动解析的可选。

你要做的仅仅是声明的时候把感叹号放到类型的结尾,而不是每次取值的可选名字的结尾。

注意:假设你在隐式解析可选没有值的时候尝试取值。会触发执行时错误。和你在没有值的普通可选后面加一个惊叹号一样。

你仍然能够把隐式解析可选当做普通可选来推断它是否包括值:

if assumedString {
println(assumedString)
}
// prints "An implicitly unwrapped optional string.

你也能够在可选绑定中使用隐式解析可选来检查并解析它的值:

if let definiteString = assumedString {
println(definiteString)
}
// prints "An implicitly unwrapped optional string.

注意:假设一个变量之后可能变成nil的话请不要使用隐式解析选项。假设你需要推断一个变量的生命周期是否nil如果。请使用普通的可选类型。

版权声明:本文博客原创文章,博客,未经同意,不得转载。

上一篇:Android新增API之AudioEffect中文API与应用实例


下一篇:对JVM运行时常量池的一些理解