表达方式: a ?? 0 + b a 是 CGFloat? , b CGFloat 和 a != nil
a ?? 0 + b
a
CGFloat?
b
CGFloat
a != nil
具体例子:
//a == 99 //b == 253 let t = ((a ?? 0) + b) let t2 = (a ?? 0 + b) //t == 352 //t2 == 99
如果我只设置了括号,为什么结果是正确的: (a ?? 0) + b
(a ?? 0) + b
两个结果都是正确的。它们可以不同,因为 + 优先级高于 ?? . 特别是,如果 a != nil
+
??
t == (a ?? 0) + b == a! + b t2 == (a ?? 0 + b) == a ?? (0 + b) == a!
Operator Declarations .