可选类型
使用可选类型(optionals)来处理值可能缺失的情况。可选类型表示两种可能: 或者有值, 你可以解析可选类型访问这个值, 或者根本没有值。
例子:
1 | let str = “123” |
这段代码将变量str
转换为num
。显然,转换可能失败。由于str
包含无法被转化为Int
类型的值,它返回一个可选类型Int(写作Int?
),表示它可能包含Int
值,也可能不包含值。
nil
当将上面例子中的str
的值改为无法转换为Int类型的值,如abcd
,打印结果,就会显示nil
。nil
表示“没有值”,可以通过给可选变量赋值nil
来表示它没有值:
1 | var code: Int? = 200 |
如果声明一个可选变量而没有赋值,它也会被自动设为nil
。
可选绑定
使用可选绑定(optional binding)来判断可选类型是否包含值,如果包含就把值赋给一个临时常量或者变量。可选绑定可以用在 if 和 while 语句中,这条语句不仅可以用来判断可选类型中是否有值,同时可以将可选类型中的值赋给一个常量或者变量。
1 | if let constantName = someOptional { |
隐式解析可选类型
有时候在程序架构中,第一次被赋值之后,可以确定一个可选类型总会有值。在这种情况下,每次都要判断和解析可选值是非常低效的,因为可以确定它总会有值。
这种类型的可选状态被定义为隐式解析可选类型(implicitly unwrapped optionals)。把想要用作可选的类型的后面的问号(String?)改成感叹号(String!)来声明一个隐式解析可选类型。与其在使用时把感叹号放在可选类型的名称的后面,你可以在定义它时,直接把感叹号放在可选类型的后面。
1 | let possibleString: String? = "An optional string." |