1、一元、二元和三元运算符
一元运算符对单一操作对象操作(如-a)。一元运算符分前置运算符和后置运算符,前置运算符需紧跟在操作对象之前(如!b),后置运算符需紧跟在操作对象之后(例如c!)。备注:在Java/C没有类似c!的语法, 在Swift中用在Optional类型取值。
二元运算符操作两个操作对象(如2 + 3),是中置的,因为它们出现在两个操作对象之间。
三元运算符操作三个操作对象,和 C 语言一样,Swift 只有一个三元运算符,就是三目运算符(a ? b : c)

2、赋值运算符


3、算术运算符
Swift支持所有数字类型的四个标准算术运算符:
加法(+)、减法(-)、乘法(*)、除法(/)

String串联也支持加法运算符:

剩余(%)运算符
余数运算符(a % b)计算出b的多少倍数将放入a中,并返回剩余的值(称为余数)
对于b的负值,b的符号被忽略。这意味着a % b和a % -b总是给出相同的答案
其余运算符(%)在其他语言中也称为模运算符。然而,它在swift中负数的行为意味着,严格来说,这是一个余数,而不是模态操作。

4、比较运算符
Swift支持以下比较运算符:
等于(a == b)、不等于(a != b)、大于(a > b)、小于(a < b)、大于或等于(a >= b)、小于或等于(a <= b)
每个比较运算符都返回一个Bool值,以指示该语句是否为真

比较运算符通常用于条件语句,例如if语句:

如果两个元组具有相同的类型和相同数量的值,您可以比较它们。元组从左到右进行比较,一次一个值,直到比较发现两个不相等的值。对这两个值进行了比较,比较的结果决定了元组比较的总体结果。如果所有元素都是相等的,那么元组本身就是相等的。但是只有当运算符可以应用于相应元组中的每个值时,才能将元组与给定运算符进行比较。例如元组(String, Bool)无法与<运算符进行比较,因为<运算符不能应用于Bool值。并且Swift标准库只包括小于七个元素的元组的元组比较运算符。要比较带有七个或更多元素的元组,需要自己实现比较运算符。
4、合并空值运算符(??)
合并空值运算符 a ?? b 如果可选项 a 有值则展开,如果没有值,是 nil,则返回默认值 b
表达式 a 必须是一个可选类型,表达式 b 必须与 a 的存储类型相同
合并空值运算符,实际上是三元运算符作用到 Optional 上的缩写 a != nil ? a! : b
如果 a 的值是非空,b的值将不会被考虑,也就是合并空值运算符是短路的
5、区间运算符
闭区间运算符:闭区间运算符(a...b)定义一个包含从a到b(包括a和b)的所有值的区间,b必须大于等于a。 闭区间运算符在迭代一个区间的所有值时是非常有用的,如在for-in循环中:

半开区间运算符:半开区间(a..<b)定义一个从a到b但不包括b的区间。 之所以称为半开区间,是因为该区间包含第一个值而不包括最后的值。

单边范围:区间运算符有另一种形式,用于尽可能向一个方向持续的范围——例如,一个范围,包括数组从索引2到数组末尾的所有元素。在这些情况下,您可以省略范围运算符一侧的值。这种范围被称为单边范围,因为运算符只有一侧的值。

6、逻辑运算符
逻辑运算符修改或组合布尔逻辑值true和false。Swift支持基于C的语言中的三个标准逻辑运算符:
&& 逻辑与。如果运算符两侧都为 TRUE 则为 TRUE
|| 逻辑或。 如果运算符两侧至少有一个为 TRUE 则为 TRUE
! 逻辑非。布尔值取反,使得true变false,false变true
7、位运算符
位运算符用来对二进制位进行操作,~, &, |, ^ 分别为取反,按位与与,按位与或,按位与异或运算
8、运算符的优先级
优先级从上到下依次递减,最上面具有最高的优先级,逗号操作符具有最低的优先级。
相同优先级中,按结合顺序计算。大多数运算是从左至右计算,只有三个优先级是从右至左结合的,它们是单目运算符、条件运算符、赋值运算符。
Swift 运算符优先级 (从高到低):
位运算符——乘除法运算符——加减法运算符——区间运算符——类型转换运算符——nil的聚合运算——比较运算符——逻辑与运算符——逻辑或运算符——三元运算符——赋值运算符
网友评论