swift运算符的优先级和结合性 – Swift最新教程

上一章Swift教程请查看:swift操作符,使用语法和使用例子
在本文中,你将了解使用运算符和操作数计算表达式的规则。
Swift运算符优先级运算符优先级是用于计算给定数学表达式的规则集合。当在单个表达式中使用多个运算符时,每个部分都按称为运算符优先级的特定顺序进行计算。某些操作符具有比其他操作符更高的优先级,这将影响表达式的计算方式。
运算符优先级表
下表列出了Swift中操作符的优先级,它在表中出现的位置越高,它的优先级就越高。
Swift标准库优先组(从高到低)

操作符组 例子
位改变优先级 > > & < < & > > > >
乘法运算优先级 & * % & * /
添加优先级 | & + & - + –   ^
范围形成优先 ..< …
铸件优先 is as
Nil-Coalescing优先 ??
比较优先级 != > < > = < = === ==
逻辑结合优先级 & &
逻辑析取优先级 ||
默认优先级 ~>
三元优先 ?:
箭头函数优先级 ( )
赋值优先级 |= %= /= & < < = & > > = & = *= > > = < < = ^= += -=
例1:Swift操作符优先级
let x = 4 + 5 * 5 print(x)

在上面的例子中,如果从左到右读取表达式,那么输出可能是45。但是,乘法运算符具有比加法运算符更高的优先级,因此表达式4 + 5 * 5被赋值为4 +(5 * 5),因此在屏幕上打印(x)输出29。
执行步骤
步长 操作符 表达式 表达式返回的值
1 * 5 * 5 25
2 + 4 + 25 29
3 = print(x) 29
例2:快速运算符优先级与复杂赋值运算符
var y = 15 y += 10 - 2 * 3 print(y)

在上面的例子中,表达式var y = 15在变量y中赋值15。
在下一个表达式y += 10 – 2 * 3中,乘法运算符的优先级高于减法和复合赋值运算符(+=)。
因此,表达式y += 10 – 2 * 3的取值为y = y +(10 -(2 * 3))。
执行步骤
步长 操作符 表达式 表达式返回的值
1 = var y = 15 15
2 * 2 * 3 6
3 10 – 6 4
4 += 15 + 4 19
Swift操作符的结合性虽然有由运算符优先级定义的预定义规则来计算表达式,但是你可能想知道如果有多个具有相同优先级的运算符会发生什么,操作符结合性定义了如何将具有相同优先级的操作符组合在一起。
在Swift中,操作符可以是左结合的,右结合的,也可以是无结合的。左关联操作符,从语句的左侧对操作数进行分组,从右侧对右关联操作符进行分组,以及没有关联的操作符在表达式中按顺序使用时没有定义行为。
操作符结合性表下表显示了Swift操作符的结合性和优先级。
Swift标准库结合性(从高到低的优先级)
操作符组 例子 结合性
位改变优先级 > > & < < & > > > > none
乘法运算优先级 & * % & * /
添加优先级 | & + & - + –   ^
范围形成优先 ..< … none
转换优先 is as none
Nil-Coalescing优先 ??
比较优先级 != > < > = < = === == none
逻辑结合优先级 & &
逻辑析取优先级 ||
默认优先级 ~> none
三元优先 ?:
箭头函数优先级 ( )
分配优先级 |= %= /= & < < = & > > = & = *= > > = < < = ^=
例3:Swift操作符的结合性
let x =40/ 2 * 10 print(x)

在上面的程序中,表达式是从左到右求值的,因为运算符属于乘法优先组,并且具有左结合性。因此,除法运算更早发生,结果是200。如果你想先执行乘法呢?你需要把2 * 10的表达式包装成()大括号:
let x =40/ (2 * 10) print(x)

【swift运算符的优先级和结合性 – Swift最新教程】你不需要记住优先级和关联表,大多数情况下,操作符的优先级和结合性本身是有意义的。当有疑问时,你总是可以使用这个表格作为参考。此外,最好使用括号使你的代码更容易理解。

    推荐阅读