炫意html5
最早CSS3和HTML5移动技术网站之一

Swift 运算符 – Swift 运算符优先级和结合性

在本文中,您将了解用于计算带有运算符和操作数的表达式的规则。

Swift运算符优先级

运算符优先级是用于计算给定数学表达式的规则集合。当在单个表达式中使用多个运算符时,每个部分按照称为运算符优先级的特定顺序进行计算。某些运算符具有比其他运算符更高的优先级,这会影响表达式的计算方式。

运算符优先级表

下表列出了Swift中运算符的优先级。它在表格中显示的越高,其优先级越高。

Swift标准库优先级组(从高到低)
运算符组 示例
位改变优先级 >>
&<< &>> >>
乘法运算优先级 &* % &
* /
加法优先级 | &+
&- + –  ^
范围形成优先 ..< …
类型转换优先级 is as
空合运算符优先级 ??
比较优先级 != > <
>= <= === ==
逻辑结合优先级 &&
逻辑析取优先级 ||
默认优先级 ~>
三元运算符优先级 ?:
箭头函数优先级 ( )
赋值优先级 |= %= /=
&<<= &>>= &= *= >>= <<= ^= += -=

示例1:Swift运算符优先级

let x = 4 + 5 * 5
print(x)

当您运行上述程序时,输出将是:

29

在上面的示例中,如果从左到右读取表达式,则可能期望输出为45。但是,乘法运算符的优先级高于加法运算符,因此表达式4 + 5 * 5被求值为4 + (5 * 5)。因此在屏幕上打印(x)输出29。

执行步骤
步骤 运算符 表达式 从表达式返回的值
1 * 5 * 5 25
2 + 4 + 25 29
3 = print(x) 29

示例2:具有复杂赋值运算符的Swift运算符优先级

var y = 15
y += 10 - 2 * 3
print(y)

当您运行上述程序时,输出将是:

19

在上面的实例中,变量 y 的表达式 var y = 15赋值为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标准库结合(优先级从高到低)
运算符组 示例 结合性
按位移位优先级 >>&<<&>> >>
乘法运算优先级 &*%&* / 左结合
加法优先级 | &+&-+-^ 左结合

范围形成优先级

.. <…
类型转换优先级 is a
空合运算符优先级 ?? 右结合
比较优先级 !=> <> = <= === ==

逻辑与优先级

&& 左结合
逻辑析取优先级 || 左结合
默认优先级 ~>
三元运算符优先级 ?: 右结合
箭头函数优先级 () 右结合
赋值优先级 | =%= / =&<< =&>> =&= * = >> = << = ^ = 右结合

示例3:Swift运算符结合性

let x =  40  / 2 * 10
print(x)

当您运行上述程序时,输出将是:

200

在上面的程序中,表达式从左到右进行计算,因为运算符属于乘法优先组,并具有左结合性。因此,除法操作会提前执行,结果是200。如果您想先执行乘法运算,该怎么办?需要将2 * 10表达式包装到()大括号中,如下所示:

let x =  40  / (2 * 10)
print(x)

当您运行上述程序时,输出将是:

2

您无需记住优先级和结合表。在大多数情况下,运算符的优先级和结合性本身就是很有意义的。如有疑问,您可以随时使用该表作为参考。另外,最好使用括号使代码更易于理解。

炫意HTML5 » Swift 运算符 – Swift 运算符优先级和结合性

Java基础教程Android基础教程