上一章Swift教程请查看:swift操作符,使用语法和使用例子
在本文中,你将了解使用运算符和操作数计算表达式的规则。
Swift运算符优先级运算符优先级是用于计算给定数学表达式的规则集合。当在单个表达式中使用多个运算符时,每个部分都按称为运算符优先级的特定顺序进行计算。某些操作符具有比其他操作符更高的优先级,这将影响表达式的计算方式。
运算符优先级表
下表列出了Swift中操作符的优先级,它在表中出现的位置越高,它的优先级就越高。
Swift标准库优先组(从高到低)
操作符组 | 例子 |
位改变优先级 | > > & < < & > > > > |
乘法运算优先级 | & * % & * / |
添加优先级 | | & + & - + – ^ |
范围形成优先 | ..< … |
铸件优先 | is as |
Nil-Coalescing优先 | ?? |
比较优先级 | != > < > = < = === == |
逻辑结合优先级 | & & |
逻辑析取优先级 | || |
默认优先级 | ~> |
三元优先 | ?: |
箭头函数优先级 | ( ) |
赋值优先级 | |= %= /= & < < = & > > = & = *= > > = < < = ^= += -= |
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 |
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标准库结合性(从高到低的优先级)
操作符组 | 例子 | 结合性 |
位改变优先级 | > > & < < & > > > > | none |
乘法运算优先级 | & * % & * / | 左 |
添加优先级 | | & + & - + – ^ | 左 |
范围形成优先 | ..< … | none |
转换优先 | is as | none |
Nil-Coalescing优先 | ?? | 右 |
比较优先级 | != > < > = < = === == | none |
逻辑结合优先级 | & & | 左 |
逻辑析取优先级 | || | 左 |
默认优先级 | ~> | none |
三元优先 | ?: | 右 |
箭头函数优先级 | ( ) | 右 |
分配优先级 | |= %= /= & < < = & > > = & = *= > > = < < = ^= | 右 |
let x =40/ 2 * 10
print(x)
在上面的程序中,表达式是从左到右求值的,因为运算符属于乘法优先组,并且具有左结合性。因此,除法运算更早发生,结果是200。如果你想先执行乘法呢?你需要把2 * 10的表达式包装成()大括号:
let x =40/ (2 * 10)
print(x)
【swift运算符的优先级和结合性 – Swift最新教程】你不需要记住优先级和关联表,大多数情况下,操作符的优先级和结合性本身是有意义的。当有疑问时,你总是可以使用这个表格作为参考。此外,最好使用括号使你的代码更容易理解。
推荐阅读
- swift三元条件运算符(三目运算符) – Swift最新教程
- swift操作符,使用语法和使用例子 – Swift最新教程
- swift使用注释的几种方式 – Swift最新教程
- Swift表达式,语句和代码块 – Swift最新教程
- swift基本输入输出 – Swift最新教程
- swift字符和字符串使用及其相关操作详解 – Swift最新教程
- swift如何理解和使用optional可选类型( – Swift最新教程)
- swift基本数据类型 – Swift最新教程
- TypeScript中的Hello World示例详细介绍