Something Different
Swift 支持大部分标准 C 语言的运算符,且改进许多特性来减少常规编码错误。如:赋值符(=
)不返回值,以防止把想要判断相等运算符(==
)的地方写成赋值符导致的错误。算术运算符(+
,-
,*
,/
,%
等)会检测并不允许值溢出,以此来避免保存变量时由于变量大于或小于其类型所能承载的范围时导致的异常结果。当然允许你使用 Swift 的溢出运算符来实现溢出。
区别于 C 语言,在 Swift 中你可以对浮点数进行取余运算(%
),Swift 还提供了 C 语言没有的表达两数之间的值的区间运算符(a..<b
和a...b
),这方便我们表达一个区间内的数值。
8 % 2.5 // 等于 0.5 8除于2.5等于3余0.5,所以结果是一个Double值0.5。
组合赋值运算符
复合赋值运算没有返回值,let b = a += 2这类代码是错误。
空合运算符(Nil Coalescing Operator)
空合运算符(a ?? b)
将对可选类型 a
进行空判断,如果 a
包含一个值就进行解封,否则就返回一个默认值 b
.这个运算符有两个条件:
- 表达式
a
必须是Optional类型 - 默认值
b
的类型必须要和a存储值的类型保持一致
空合运算符是对以下代码的简短表达方法
a != nil ? a! : b
区间运算符
- 闭区间运算符(a...b)定义一个包含从a到b(包括a和b)的所有值的区间,b必须大于等于a。
- 半开区间(a..<b)定义一个从a到b但不包括b的区间。 之所以称为半开区间,是因为该区间包含第一个值而不包括最后的值。
逻辑运算符
逻辑与(&&
)和逻辑(||
)都是短路计算(short-circuit evaluation):
- 逻辑与运算时,如果第一个值为false,那么是不去计算第二个值的,因为它已经不可能影响整个表达式的结果了。
- 逻辑或运算时,当左端的表达式为true时,将不计算右边的表达式了,因为它不可能改变整个表达式的值了。
ps: Swift 逻辑操作符&&和||是左结合的,这意味着拥有多元逻辑操作符的复合表达式优先计算最左边的子表达式。