📅  最后修改于: 2023-12-03 14:47:48.312000             🧑  作者: Mango
在Swift中,所有的运算符都有一个优先级和一个关联性。优先级定义了一个运算符在表达式中的优先级,而关联性定义了当一些运算符与同一个操作数一起使用时,它们的组合方式。
Swift中,所有运算符都有一个默认的优先级,这个优先级决定了运算符在表达式中的使用顺序。
具体如下:
| 运算符 | 关联性 | 优先级 |
| --- | --- | --- |
| ()
| left associative | highest |
| !
、+
、-
、~
、++
、--
、*
、/
、%
| right associative | high |
| +
、-
、<<
、>>
、&
、^
、\|
| left associative | medium |
| ..&
、..<
| none | low |
| =
、+=
、-=
、*=
、/=
、%=
、&=
、^=
、\|=
、<<=
、>>=
、$=
| right associative | very low |
| ?
| right associave | lowest |
其中优先级从高到低排列。
需要注意的是,这个表格中不是所有的运算符都会出现。对于那些没有在表格中定义的运算符,它们的优先级将会被Swift识别为与同一类别中的其他运算符相同。
除了优先级外,Swift中每一个运算符都有一个关联性,关联性定义了当一些运算符与同一个操作数一起使用时它们的组合方式。关联性分为right associative和left associative两种,它们将运算符从左往右和从右往左执行。
Left associative 左关联性,从左到右执行。例如:3 + 4 + 5
先计算 3+4
然后再加上5
。
Right associative 右关联性,从右向左执行。例如: a = b = c
先计算 b=c
,然后再将这个结果赋值给a
。
需要特别注意的是,Swift中的赋值运算符=
具有右关联性,因此可以使用 a = b = c
的方式进行赋值操作。
接下来举一些例子,来更好的理解Swift运算符的优先级和关联性的具体应用:
var a = 5, b = 10, c = 15
var d = a + b * c // d = 155
在这次计算中,首先计算 b*c
, 得到 150,在加上a
的值,最后得到155
。这是因为乘法运算符*
的优先级高于加法运算符+
。
var a = 5, b = 10, c = 15
var d = (a + b) * c // d = 225
在这次计算中,首先计算(a+b)
,得到 15,再将这个结果与c
相乘,得到225
。这是因为括号()
的优先级高于乘法运算符*
,并且在这种情况下括号与加法相互作用。
var a = 5, b = 10, c = 15
var d = a << 2 & b ^ c // d = 15
在这次计算中,a << 2
先执行,结果为20
,然后b & 20
将b
与二进制数 10100
进行按位与(&)操作得到0
,最后计算 0 ^ 15
,结果为15
。
了解Swift运算符的优先级和关联性是做好Swift编程的关键之一。通过本篇文章的简介,希望可以帮助大家更好的掌握这个知识点。