赋值运算符、算术运算符、组合赋值运算符、比较运算符、三目运算符、空合运算符、区间运算符、逻辑运算符。

Swift支持大部分C语言运算符,且改进许多特性来减少常规编码错误。如:赋值符(=)不返回值,以防止把想要判断相等运算符(==)的地方写成赋值符导致的错误。算术运算符(+,-,*,/,%等)会检测并不允许值溢出,以此来避免保存变量时大于或小于其类型所能承载的范围时导致的异常结果。当然允许使用Swift的溢出运算符来实现溢出。

Swift还提供了C语言没有的表达两数之间的值区间运算符(a..<b和a...b),这方便我们表达一个区间内的数值。

 

术语:

运算符:一元、二元、三元

一元运算符对单一操作对象操作(如-a)。分为前置和后置运算符,前置运算符在操作对象前面,后置运算符跟在操作对象之后。

二元运算符操作两个操作对象(如2+3),是中置的。

三元运算符操作三个操作对象。Swift中只有一个三元运算符,就是三目运算符(a?b:c)。

 

赋值运算符:

=,a=b表示用b的值来初始化或更新a的值。

如果赋值的右边是一个多元组,它的元素可以马上被分解成多个常量或变量:

let (x,y)=(1,2)

与C语言和OC不同,Swift的赋值操作并不返回任何值。这个特性使你无法把(==)错写成(=),即像if a=b这样的代码是错误的。(如为Int8变量赋值128会直接报错)。

 

算术运算符:

+、-、*、/

与C语言和OC不同的是,Swift默认情况下不允许在数值运算中出现溢出错误。但是可以使用Swift的溢出运算符来实现溢出运算(如 a&+b)。

加法运算符也可用于String的拼接。var a="cjj"+"xyy"

求余运算符(a%b)是计算b的多少倍刚刚好可以容入a,返回多出来的那部分(余数)。

Swift的求余运算符与C和C++相同,-9%5都是-4.(python的-9%5是1)

一元负号运算符,-,数值的正负号切换。一元负号运算符与操作对象之间没有空格。

一元正号符+不做任何改变地返回操作数的值。

 

组合赋值运算符:

+=、-=

 

比较运算符:

==、!=、>、<、>=、<=

返回布尔值。

 

三目运算符:

?:

问号前的操作对象是布尔类型。

 

空合运算符(Nil Coalescing Operator):

空合运算符(a??b)将可选类型a进行空判断,如果a包含一个值就进行解封,否则就返回一个默认值b。表达式a必须是Optional类型。默认值b的类型必须要和a存储值的类型保持一致。

空合运算符等同于:a!=nil?a!:b

 

区间运算符:

Swift提供了两个方便表达一个区间的值的区间运算符。

闭区间运算符:a...b,定义一个从a到b的闭区间。

半开区间运算符:a..<b定义一个从a到b但不包括b的区间。左闭右开。

半开区间运算符很适合列表(如数组、字典等,元组无count属性)从开始到结尾的下标遍历。count指列表长度,即最右下标右边一位。

 

逻辑运算符:

逻辑运算符的操作对象是逻辑布尔值。Swift支持基于C语言的三个逻辑运算。

!、&&、||

逻辑非!:对布尔值取反

逻辑与&&:前后两个布尔值都为true时取true

逻辑或||:前后两个布尔值存在一个true就取true

 

使用括号来明确优先级:

为了一个复杂表达式更容易读懂,在合适地方使用括号来明确优先级。

 

 

Swift提供四种标准的位操作符:

……、&、|、~