作者刘文涛
转载请注明出处
基本运算符
运算符是检查、改变、合并值的特殊符号或短语。例如,加号(+
)将两个数相加(如 let i = 1 + 2
)。更复杂的运算例子包括 逻辑与运算符 &&
(如 if enteredDoorCode && passedRetinaScan
)。
Swift支持大部分标准 C 语言的运算符,且改进许多特性来减少常规编码错误。如:赋值符 (=
)不返回值,以防止把想要判断相等运算符(==
)的地方写成赋值符导致的错误。算数运算符(+,-,*,/,%
等)会检测并不允许值溢出,以此来避免保存变量时由于变量大于或小于其类型所能承载的范围时导致的异常结果。当然允许你使用Swift的溢出运算符来实现溢出。
Swift还提供了 C 语言没有的表达两数之间的值的区间运算符(a..<b
和 a...b
),这方便我们表达一个区间内的数值。
术语
运算符分为一元、二元和三元运算符:
• 一元运算符对单一操作对象操作(如 -a
)。一元运算符分前置运算符和后置运算符,前置运算符需紧跟在 操作对象之前(如 !b
),后置运算符需紧跟在操作对象之后(如 c!
)。
• 二元运算符操作两个操作对象(如 2 + 3
),是中置的,因为它们出现在两个操作对象之间。
• 三元运算符操作三个操作对象,和 C 语言一样,Swift 只有一个三元运算符,就是三目运算符( a ? b : c
)。
受运算符影响的值叫操作数,在表达式 1 + 2
中,加号 +
是二元运算符,他的两个操作数是值 1
和 2
。
溢出运算符
Swfit为整型计算提供了5个&符号开头的溢出运算符。
溢出加法 &+
溢出减法 &-
溢出乘法 &*
溢出除法 &/
溢出求余 &%
比如溢出加法运算符(&+
)。所有的这些溢出运算符都是以 &
开头的。
值的上溢出
下面的例子使用了溢出加法 &+
来解剖的无符整数的上溢出
|
|
willOverflow
用 UInt8
所能承载的最大值 255(二进制 11111111
),然后用 &+
加1.然后 UInt8
就无法表达这个新值的二进制了,也就导致了这个新值上溢出了。溢出后,新值在 UInt8
的承载范围内的那部分是 00000000
,也就是 0。
赋值运算符
赋值运算符 (a = b
),表示用 b 的值来初始化或者更新 a 的值。
与 C 语言和 Objective-C 不同,Swift 的赋值操作并不返回任何值。所以下面的代码是错误的:
|
|
这个特性使你无法把(==
)错写成(=
),由于 if x = y
是错误代码,Swift能帮你避免此类错误的发生。
算术运算符
Swift 中所有的数值类型都支持了基本的四则算术运算符:
• 加法(+
)
• 减法(-
)
• 乘法(*
)
• 除法(/
)
加法运算符也可用于 String
的拼接:
|
|
求余运算符
求余运算符 (a % b
) 是计算 b 的多少倍刚刚好可以容入a,返回多出来的那部分 (余数)。
在对负数求余时,负数的符号会被忽略。这意味着 a % b
和 a % -b
的结果是相同的。
空合运算符
空合运算符 (a ?? b
)将对可选类型 a 进行空判断,如果 a 包含一个值就进行解封,否则就返回一个默认值 b。表达式 a 必须是 Optional 类型。默认值 b 的类型必须要和 a 存储值的类型保持一致。
空合运算符是对以下代码的简短表达方法:
|
|
上述代码使用了三目运算符,当可选类型 a 的值不为空时,进行强制解封 (a!
),访问 a 中的值;反之返回默认值 b 。无疑空合运算符( ?? )
提供了一种更为优 的方式去封装条件判断和解封两种行为,显得简洁以及更具可读性。
注意:
如果 a 为非空值(non-nil),那么值 b 将不会被计算。这也就是所谓的短路求值。
下文例子采用空合运算符,实现了在默认颜色名和可选自定义颜色名之间抉择:
|
|
区间运算符
Swift 提供了两个方便表达一个区间的值的区间运算符。
闭区间运算符
闭区间运算符(a…b)定义一个包含从 a 到 b (包含 a 和 b)的所有值的区间。 a 的值不能超过 b。
半开区间运算符
半开区间运算符( a..<b
)定义一个从 a 到 b 但不包括 b 的区间。之所以称为半开区间,是因为该区间包含第一个值而不包含最后的值。
半开区间的实用性在于当你使用一个从 0 开始的列表(如数组)时,非常方便地从0数到列表的长度。
|
|
逻辑运算符
逻辑运算符的操作对象是逻辑布尔值。Swift 支持 C 语言的三个标准逻辑运算。
• 逻辑非( )
• 逻辑与( )
• 逻辑或( )
逻辑非运算符
逻辑非运算符(!a
)对一个布尔值取反,使得 true 变 false,false 变 true。
它是一个前置运算符,需紧跟在操作数之前,且不加空格。读作 非 a 。
逻辑与运算符
逻辑与运算符( a && b
)表达了只有 a 和 b 的值都为 true 时,整个表达式的值才会是 true 。
逻辑或运算符
逻辑或运算符( a || b
)是一个由两个连续的 | 组成的中置运算符。它表示了两个逻辑表达式的其中一个为 true ,整个表达式就为 true 。