了解了?和!,又遇到??,说实话感觉很晕~~感觉??就像三目运算符
?? 操作符的左边是一个 Optional 值,右边是一个普通值,它的作用就是,如果左边的 Optional 值为 nil, 那么就使用右边的普通值作为返回值,如果左边的 Optional 不为 nil,则返回左边的 Optional 解包后的值。
例如
var a:Int?
print(a ?? 2)
打印2,因为a是可选类型,而且没有给显式赋值操作,所以为nil。当??左边optional值为nil,则取??右边的值。故打印2
同理
var a:Int? = 100
print(a ?? 2)
打印100,因为可选类型a显式赋值为100,??左边optional值不为nil,所以为解包后的值,即100
个人理解??相当于三目运算。例如上边第一个例子可以转换成
print(a == nil ? 2 : a)
即如果a==nil成立,那么取2,如果a==nil不成立,那么取a值