代码之家  ›  专栏  ›  技术社区  ›  Vyachaslav Gerchicov

操作员优先权的快速故障

  •  -1
  • Vyachaslav Gerchicov  · 技术社区  · 7 年前

    表达方式: 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

    1 回复  |  直到 7 年前
        1
  •  2
  •   Martin R    7 年前

    两个结果都是正确的。它们可以不同,因为 + 优先级高于 ?? . 特别是,如果 a != nil

     t  == (a ?? 0) + b == a! + b
     t2 == (a ?? 0 + b) == a ?? (0 + b) == a!
    

    Operator Declarations .

    推荐文章