空合运算符(a ?? b)将对可选类型 a 进行空判断,如果 a 不为nil就返回,否则就返回一个默认值 b。表达式 a 必须是 Optional 类型。默认值 b 的类型必须要和 a 存储值的类型保持一致。
空合运算符a??b实际上是对如下三目运算的的简短表达方法
a != nil ? a!:b
两者之间是等价的
例如:
let defaultColorName = "red"
var userDefinedColorName: String?//默认值为nil
var colorNameToUser =userDefinedColorName ?? defaultColorName
//userDefinedColorName 的值为空 所以 colorNameToUser的值为"red"
如果你分配一个非空值(non-nil)给 userDefinedColorName,再次执行空合运算,运算结果为封包在 userDefaultColorName 中的值,而非默认值。
userDefinedColorName = "green"
colorNameToUser =userDefinedColorName ?? defaultColorName
//userDefinedColorName 非空,因此colorNameToUser 的值为"green"