相对于Java,Swift有一大特点,可选类型,用于处理值可能缺失的情况。
Java的话,在值缺失的情况,还是可以使用的,不过会抛NullPointException异常。而Swift呢,提供了可选类型,使用前可以先“获取”,然后再使用,当然也可以“强行获取”。
声明
var name: String?
name = "Johan"
name = nil
在已有类型后面添加“?”即可声明为可选类型,例子中name为String的可选类型,当address没有值时为nil(Java中的null)。只有声明为可选类型时,才可以设置为nil。
取值
if name != nil {
print("name is \(name!)")
}
获取值前,需判断是否为空,如果不为空,可以通过变量后面加“!”去“强行获取”值。
可选绑定
相对于上面“取值”方式来说,下面这种方式取值更为优雅
if let realName = name {
print("name is \(realName)")
}
在 if 中,先尝试去获取name的值,如果name有值,realName便可获取realName的值;如果没有值,则不进入 if 块中。
隐形解析可选类型
var name: String!
name = "Johan"
print("name is \(name)") // 没有用!取值
类型加“!”为隐形解析可选类型,和普通的可选类型相比,在获取值时不需要使用“!”获取,但是注意了,你要确定这个可选类型在第一次赋值之后一直有值,一般用于类的构造函数中。