Swift 运算符优先级和结合性
- 操作符优先级定义:Swift 中操作符优先级规则确定表达式中哪个操作符首先执行,例如乘法 (
*
) 优先于加法 (+
)。 - 操作符优先级顺序:不同操作符有不同的优先级,如位移最高,其次是乘法类,再是加法类,最后是赋值运算符。
- 操作符结合性规则:当表达式中有相同优先级的操作符时,结合性决定求值顺序,如乘法 (
*
) 和除法 (/
) 为左结合性,表示从左到右计算。
操作符优先级是一组规 则,用于确定首先执行哪个操作符。
在学习操作符优先级之前,请确保你了解 Swift 操作符。
让我们举个例子,假设一个表达式中有多个操作符。
var num = 8 + 5 * 4 // 28
这里,
- 如果先执行
+
,num
的值将是52
- 如果先执行
*
,num
的值将是28
在这种情况下,操作符优先级用于确定首先执行哪个操作符。*
的操作符优先级高于 +
,所以先执行乘法。
操作符优先级表
下表列出了 Swift 操作符的优先级。表中越靠上的操作符,其优先级越高。
操作符 | 示例 |
---|---|
位移 | >> << |
乘法类 | % * / |
加法类 | + - ^ |
范围 | ..< ... |
类型转换 | is as |
空合运算符 | ?? |
比较 | != > < >= <= === == |
逻辑与 | && |
逻辑或 | || |
三元运算符 | ? : |
赋值运算符 | = %= /= *= >>= <<= ^= += -= |
示例:带复杂赋值运算符的操作符优先级
var num = 15
num += 10 - 2 * 3
print(num)
输出
19
在上述示例中,我们创建了一个值为 15
的变量 num
。注意这个语句
num += 10 - 2 * 3
这里,从高到低的优先级顺序是 *
、-
和 +=
。因此,语句被执行为 num += 10 - (2 * 3)
。
Swift 操作符结合性
如果一个表达式中有两个优先级相同的操作符,表达式将根据其结合性(从左到右或从右到左)进行求值。例如,
print(6 * 4 / 3) // 8
这里,操作符 *
和 /
的优先级相同。它们的结合性是从左到右。因此,先执行 6 * 4
。
注意: 如果我们想先执行除法,我们可以使用括号,如 print(6 * (4 / 3))
。
操作符结合性表
如果一个表达式中有两个优先级相同的操作符,表达式将根据其结合性进行求值。
- 左结合性 - 从左到右求值
- 右结合性 - 从右到左求值
- 无结合性 - 操作符没有定义的行为
例如,
print (6 * 4 / 3)
这里,操作符 *
和 /
的优先级相同。然而,它们的结合性是左结合。因此,先执行 6 * 4
。
下表显示了 Swift 操作符的结合性。
| 操作符 | 结合性 |
| -------------------------------------------------- | ----------------------------------- | ----- | ---- |
| Bitwise Shift : >>
<<
| none |
| Multiplicative : %
*
/
| left |
| Additive : |
+
-
^
| left |
| Range : ..<
...
| none |
| Casting : is as
| none |
| Nil-Coalescing : ??
| right |
| Comparison : !=
>
<
>=
<=
===
==
| none |
| Logical AND : &&
| left |
| Logical OR : \|\|
| left |
| Ternary Operator : ? :
| right |
| Assignment : \|=
%=
/=
\*=
>>=
<<=
^=
| right |