可选类型

什么是可选类型?

可以被赋予nil值的类型,在类型后添加问号(?)

如Int类型的值为整型数,但不太好表示“空”的含义,Int?可以赋值为整型数和nil值

如:

var age:Int? = 3

var name:String? = nil

使用可选类型

print(age) //Optional(3)

print(age!) //3

!运算,用于解绑可选类型变量的值

注意:如果age为nil,使用!解绑将使程序崩溃

再如:

var age1:Int? = 3

var age2:Int;

age2 = age1!

隐式解绑的可选类型

定义变量时,将?替换成为!,如:

var age:Int! = 3

print(age) //3

print(age!) //3

可选链中的解绑

如:

class Department {

var no : Int = 0

var name:String = "neuedu"

var com:Company? = nil

}

class Company {

var no : Int = 0

var name : String? = "neusoft"

}

var dep = Department()

print(dep.com!.name)

dep.com使用!解绑时,如果为nil,程序会报错崩溃

这种情况下,可以使用?代替!解绑,如果为nil,则整个表达式为nil,即:

print(dep.com?.name) // nil

可选链使用潜在的问题:使用了?解析可选链后,表达式返回的只能是可选类型

如dep.com!.name?想要返回的类型是String,但实际只能返回String?