一、空合运算符的使用:
当一个可选类型的数据为 nil 时,就默认给它赋一个值,然后再进行运算;
“??” 为空合运算符;
如果 “??” 前面的数据为 nil 时,就直接取 “??” 后面的值;
如果 “??” 前面的数据不等于 nil,就将 “??” 前面的数据强制解包,并进行赋值;
例1:“??” 前面的数据不等于 nil
var a:String? = "a"
let b = a ?? "abc"
b //"a"
- 例2:“??” 前面的数据等于 nil
var a:String? = "a"
a = nil
let b = a ?? "abc"
b //"abc"
例1和例2为字符串类型对应的可选类型,例3和例4为整形类型对应的可选类型
- 例3:“??” 前面的数据不等于 nil
var c:Int? = 123
let d = c ?? 10
d //123
- 例4:“??” 前面的数据等于 nil
var c:Int? = 123
c = nil
let d = c ?? 10
d //10
二、如果没有空合运算符,则代码实现如下:
- 第一种实现:if 结构
var aa:Int? = 2
//aa = nil
var bb = 0
if aa == nil {
bb = 0
}else{
bb = aa!
}
bb //2
- 第二种实现:三目运算符表达式
var aa:Int? = 2
aa = nil
var bb = 0
bb = aa == nil ? 0 : aa!
bb //0