运算符优先级是一组决定哪个运算符首先被执行的规则。
在了解运算符优先级之前,请确保您了解 Swift 运算符。
让我们举个例子,假设一个表达式中有一个以上的运算符。
var num = 8 + 5 * 4 // 28
这里,
- 如果首先执行
+
,则num
的值将为52
- 如果首先执行
*
,则num
的值将为28
在这种情况下,运算符优先级用于确定哪个运算符首先被执行。*
的运算符优先级高于 +
,因此首先执行乘法。
运算符优先级表
下表列出了 Swift 运算符的优先级。它在表中出现的位置越高,优先级越高。
运算符 | 示例 |
---|---|
位移 | >> << |
乘法 | % * / |
加法 | | - + - ^ |
范围 | ..< ... |
类型转换 | is as |
nil 合并 | ?? |
比较 | != > < >= <= === == |
逻辑与 | && |
逻辑或 | || |
三元运算符 | ? : |
赋值优先级 | |= %= /= *= >>= <<= ^= += -= |
示例:带复杂赋值运算符的运算符优先级
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 运算符的关联性。
运算符 | 结合性 |
---|---|
位移: >> << |
无 |
乘法: % * / |
左 |
加法: | + - ^ |
左 |
范围: ..< ... |
无 |
类型转换: is as |
无 |
nil 合并: ?? |
右 |
比较: != > < >= <= === == |
无 |
逻辑与: && |
左 |
逻辑或: || |
左 |
三元运算符: ? : |
右 |
赋值: |= %= /= *= >>= <<= ^= |
右 |