本教程属于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 (||)都是左联动的。
赋值和复合赋值运算符 (=,+= 等 ) 以及三元条件 (?:) 是右联的。
比较 (==,!=,<,>,<=,>=) 不具有关联性。