在实际开发过程中,经常会遇到一个数据可能有值,也可能没有值的情况。针对这种情况,Swift增加了可选类型(Optional)。可选类型可以生命所有的数据类型。
可选类型的声明
在声明常量或变量时,在类型后面加问号(?),就表示它是可选的。
(1)可选常量:
let a:Int?
可选常量没有默认值,在使用之前必须设置初值。
(2)可选变量:
var x:Int?
可选变量如果不给赋初值,它的默认值为 nil
注意:Swift中的nil和Objective-C中的nil不一样。在OC中,nil表示空指针,只能用于对象类型,在Swift中,没有指针的概念,nil的含义是一个值,表示值的缺失,可用于任何类型。
解包
可选类型不能直接参与计算,参与计算时需要进行解包。解包的方法是在可选项后加感叹号(!)。
let x:Int? = 10
print(x! + 2)
在解包前,可选项必须有值
隐式解析
可选类型每次解包很麻烦,可以采用隐式解析的方法,在声明时将数据类型后的问号改成叹号。
let x:Int! = 10
var y:Int!= 20
如果变量的值可能为nil,不要用隐式解析的方法
空合并运算符
可选类型如果为空是不能参与运算的,所以在使用之前要对其进行判断,空合并运算符可以简化运算:
空合并运算符相当于算目运算符:a! = nil ? a! : b。空合并运算符更加简洁,可读性增强。
使用空合并运算符需要注意,必须符合以下两个条件:
- 表达式 a 必须是可选类型
- 默认值b的数据类型必须与 a 的值 数据类型一致
OK,这就是可选类型的声明和基本用法,明天分享控制流。