已更新
表达式: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
答案 0 :(得分:2)
两个结果都是“正确的”。它们可以有所不同,因为+
的优先级高于??
。特别是如果a != nil
:
t == (a ?? 0) + b == a! + b
t2 == (a ?? 0 + b) == a ?? (0 + b) == a!
可以在Operator Declarations上找到运算符优先级的完整列表。