Swift操作符的优先级和关联性

381 阅读1分钟

本教程属于Swift系列

想一想这个表达式。

let amount = 1 + 2 * 3

amount 的值可能会发生巨大的变化,这取决于1 + 2 是否在2 * 3 之前计算。

计算的顺序是由运算符的优先级决定的。从较高的优先级到较低的优先级,至于最流行的运算符,我们有。

  • 乘法 (*), 除法 (/), 余数 (%)
  • 加法 (+), 减法 (-)
  • 比较 (==,!=,<,>,<=,>=)
  • 逻辑和 (&&) 和OR (||)
  • 三元条件 (?:)
  • 赋值和复合赋值运算符 (=,+= 等 )

这意味着,上述表达式的解决首先是计算乘法,然后是计算和。

let amount = 1 + 2 * 3 // = 7

完整的优先级表,更加复杂,可在developer.apple.com/documentati…获得。

当在一个表达式里面有多个具有相同优先级的运算符时,我们就会使用运算符的关联性。关联性是一种属性,我们用来确定当优先级相同时哪个操作具有优先权。

例如,考虑这个问题。

let amount = 4 / 2 * 5

取决于我们是先执行4 / 2 还是2 * 5 ,结果可能是10 还是0,4

关联性解决了这个问题。乘法是左联想的,所以我们必须先执行左边的表达式。圆括号可以帮助我们解决这个问题。

let amount = (4 / 2) * 5

乘法 (*)、除法 (/)、余数 (%)、加法 (+)、减法 (-)、逻辑 AND (&&)、逻辑 OR (||)都是左联动的

赋值和复合赋值运算符 (=,+= 等 ) 以及三元条件 (?:) 是右联的。

比较 (==,!=,<,>,<=,>=) 不具有关联性。