可选绑定
使用可选绑定(optional binding)来判断可选是否包含值,如果包含就把值赋给一个临时
常量或者变量。可选绑定可以用在if和while语句中来对可选的值进行判断并把值赋给一
个常量或者变量。
nil
你可以给可选变量赋值为nil来表示它没有值:
var serverResponseCode: Int? = 404
// serverResponseCode 包含一个可选的 Int 值 404
serverResponseCode = nil
// serverResponseCode 现在不包含值
注意:nil不能用于非可选的常量和变量。如果你的代码中有常量或者变量需要处理值缺失
的情况,请把它们声明成对应的可选类型。
如果你声明一个可选常量或者变量但是没有赋值,它们会自动被设置为nil:
var surveyAnswer: String?
// surveyAnswer 被自动设置为 nil
注意:Swift的nil和Objective-C中的nil并不一样。在Objective-C中,nil是一个指向
不存在对象的指针。在Swift中,nil不是指针——它是一个确定的值,用来表示值缺失。
任何类型的可选都可以被设置为nil,不只是对象类型。
隐式解析可选
如上所述,可选暗示了常量或者变量可以“没有值”。可选可以通过if语句来判断是否有
值,如果有值的话可以通过可选绑定来解析值。
有时候在程序架构中,第一次被赋值之后,可以确定一个可选总会有值。在这种情况下,
每次都要判断和解析可选值是非常低效的,因为可以确定它总会有值。
这种类型的可选被定义为隐式解析可选(implicitly unwrapped optionals)。把想要用作可
选的类型的后面的问号(String?)改成感叹号(String!)来声明一个隐式解析可选。
当可选被第一次赋值之后就可以确定之后一直有值的时候,隐式解析可选非常有用。隐式
解析可选主要被用在Swift中类的构造过程中,请参考类实例之间的循环强引用。
一个隐式解析可选其实就是一个普通的可选,但是可以被当做非可选来使用,并不需要每
次都使用解析来获取可选值。