Swift 运算符
运算符是告诉编译器执行特定数学或逻辑操作的符号。Objective-C具有丰富的内置运算符,并提供以下类型的运算符-
- 算术运算符
 - 比较运算符
 - 逻辑运算符
 - 按位运算符
 - 赋值运算符
 - 范围运算符
 - 其他运算符
 
本教程将逐一解释算术、关系、逻辑、按位、赋值和其他运算符。
算术运算符
下表显示了Swift 4语言支持的所有算术运算符。假设变量 A 的值为10,变量 B 的值为20,则-
| 操作符 | 描述 | 示例 | 
|---|---|---|
+ | 
相加两个操作数 | A + B将得到30 | 
− | 
从第一个操作数减去第二个操作数 | A − B将得到-10 | 
* | 
乘以两个操作数 | A * B将得到200 | 
/ | 
分子除以分母 | B / A将得到2 | 
% | 
取模操作符和整数/浮点数除法后的余数 | B % A将得到0 | 
比较运算符
下表显示了Swift 4语言支持的所有关系运算符。假设变量 A 为10,变量 B 为20,那么−
| 运算符 | 描述 | 示例 | 
|---|---|---|
== | 
检查两个操作数的值是否相等;如果相等,则条件为真。 | (A == B) 不为真。 | 
!= | 
检查两个操作数的值是否不相等;如果不相等,则条件为真。 | (A != B) 为真。 | 
> | 
检查左操作数的值是否大于右操作数的值;如果是,则条件为真。 | (A > B) 不为真。 | 
< | 
检查左操作数的值是否小于右操作数的值;如果是,则条件为真。 | (A < B) 为真。 | 
>= | 
检查左操作数的值是否大于或等于右操作数的值;如果是,则条件为真。 | (A >= B) 不为真。 | 
<= | 
检查左操作数的值是否小于或等于右操作数的值;如果是,则条件为真。 | (A <= B) 为真。 | 
逻辑运算符
下表显示了Swift 4语言支持的所有逻辑运算符。假设变量 A 的值为1,变量 B 的值为0,则结果为−
| 运算符 | 描述 | 示例 | 
|---|---|---|
&& | 
逻辑与运算符。如果两个操作数都非零,则条件为真。 | (A && B) 为假。 | 
|| | 
逻辑或运算符。如果两个操作数中有任意一个非零,则条件为真。 | (A || B) 为真。 | 
! | 
逻辑非运算符。用于改变操作数的逻辑状态。如果条件为真,则逻辑非运算符将使其变为假。 | !(A && B) 为真。 | 
位运算符
位运算符作用于位并进行逐位操作。&、|和^的真值表如下所示-
| p | q | p&q | 
p|q | 
p^q | 
|---|---|---|---|---|
| 0 | 0 | 0 | 0 | 0 | 
| 0 | 1 | 0 | 1 | 1 | 
| 1 | 1 | 1 | 1 | 0 | 
| 1 | 0 | 0 | 1 | 1 | 
Assume A = 60; and B = 13;
In binary format, they will be as follows:
A = 0011 1100
B = 0000 1101
-----------------
A & B = 0000 1100
A|B = 0011 1101
A^B = 0011 0001
~A = 1100 0011
Swift 4语言支持的位操作符列在下表中。假设变量 A 持有60,变量 B 持有13,则7-
| 操作符 | 描述 | 示例 | 
|---|---|---|
& | 
位与运算符,如果两个操作数中都存在该位,则结果中的该位为1,否则为0。 | (A & B) 将得到12,即0000 1100 | 
| | 
位或运算符,如果两个操作数中任意一个存在该位,则结果中的该位为1。 | (A | B) 将得到61,即0011 1101 | 
^ | 
位异或运算符,如果一个操作数中的某一位为1,而另一个操作数中的同一位为0,则结果中的该位为1,否则为0。 | (A ^ B) 将得到49,即0011 0001 | 
~ | 
取反运算符,对操作数的每一位取反。 | (~A) 将得到-61,即1100 0011(补码形式)。 | 
<< | 
左移运算符,将左操作数的值左移右操作数指定的位数。 | (A << 2) 将得到240,即1111 0000 | 
>> | 
右移运算符,将左操作数的值右移右操作数指定的位数。 | A >> 2 将得到15,即0000 1111 | 
赋值运算符
Swift 4支持以下赋值运算符 –
| 运算符 | 描述 | 示例 | 
|---|---|---|
= | 
简单赋值运算符,将右侧操作数的值赋给左侧操作数 | C = A + B 将A + B的值赋给C | 
+= | 
加和赋值运算符,将右侧操作数加到左侧操作数上,并将结果赋给左侧操作数 | C += A 等同于 C = C + A | 
-= | 
减和赋值运算符,将右侧操作数从左侧操作数中减去,并将结果赋给左侧操作数 | C -= A 等同于 C = C - A | 
*= | 
乘和赋值运算符,将右侧操作数与左侧操作数相乘,并将结果赋给左侧操作数 | C *= A 等同于 C = C * A | 
/= | 
除和赋值运算符,将左侧操作数除以右侧操作数,并将结果赋给左侧操作数 | C /= A 等同于 C = C / A | 
%= | 
取模和赋值运算符,使用两个操作数进行取模,并将结果赋给左侧操作数 | C %= A 等同于 C = C % A | 
<<= | 
左移和赋值运算符 | C <<= 2 等同于 C = C << 2 | 
>>= | 
右移和赋值运算符 | C >>= 2 等同于 C = C >> 2 | 
&= | 
位与和赋值运算符 | C &= 2 等同于 C = C & 2 | 
^= | 
位异或和赋值运算符 | C ^= 2 等同于 C = C ^ 2 | 
|= | 
位或和赋值运算符 | C |= 2 等同于 C = C | 2 | 
范围运算符
Swift 4包含两个范围运算符,用于快速表达一系列的值。以下表格解释了这两个运算符。
| 运算符 | 描述 | 示例 | 
|---|---|---|
| 闭合范围 | (a...b)定义了从a到b的范围,包括a和b的值。 | 
1...5表示1、2、3、4和5 | 
| 半开放范围 | (a..< b)定义了从a到b的范围,但不包括b。 | 
1..< 5表示1、2、3和4 | 
| 单边范围 | a…定义了从a到元素末尾的范围 …a定义了从开头到a的范围 | 
1… 表示1、2、3…元素末尾 …2表示开头…到1、2 | 
其他运算符
Swift 4支持一些其他重要的运算符,包括 范围 和? :,在下表中有解释。
| 运算符 | 描述 | 示例 | 
|---|---|---|
| 一元减号 | 使用前缀-可以切换数值的符号 | -3或-4 | 
| 一元加号 | 返回操作数的原值,没有任何变化。 | +6得到6 | 
| 三元条件运算符 | 条件 ? X : Y | 如果条件为真,则值为X,否则为Y | 
运算符优先级
运算符优先级决定了表达式中项的分组方式。这会影响表达式的求值方式。某些运算符的优先级高于其他运算符;例如,乘法运算符的优先级高于加法运算符。
例如,x = 7 + 3 * 2; 在这里,x被赋值为13,而不是20,因为乘法运算符的优先级高于加法运算符,所以它首先与3*2相乘,然后再加上7。
在这里,优先级最高的运算符出现在表格的顶部,优先级最低的出现在底部。在表达式中,优先级高的运算符将先被求值。
| 运算符 | 描述 | 示例 | 
|---|---|---|
| 主表达式运算符 | () [] . expr++ expr-- | 
从左到右 | 
| 一元运算符 | * & \+ - ! ~ ++expr --expr * / % \+ - >> << < > <= >= == != | 
从右到左 | 
| 二元运算符 | & ^ | && || | 
从左到右 | 
| 三元运算符 | ?: | 
从右到左 | 
| 赋值运算符 | = += -= *= /= %= >>= <<= &=^= |= | 
从右到左 | 
| 逗号 | , | 
从左到右 | 
极客教程