第3章 运算符 运算符是一种特殊的符号。通过运算符,可以实现对变量或常量的值进行操作,包括值的检查、值的改变及值的合并。本章从最基本的赋值运算符开始,依次介绍算术运算符、关系运算符、逻辑运算符、三元运算符以及区间运算符。 3.1赋值运算符 赋值运算符“=”用来初始化或者改变一个变量的值。如图3.1所示,变量str通过赋值运算符初始化为字符串"Hello,playground"。变量newStr通过赋值运算符初始化为变量str的值。 图3.1赋值运算符 元组也可以通过赋值运算符,对其中的所有元素一次性赋值。如图3.1所示,元组(a,b,c)被初始化赋值为(1,2,3),相当于a、b、c分别被赋值为1、2、3。 Chapter 3第3章运算符 3.2算术运算符 Swift中所有的数值类型都支持最基本的四则运算: 加(+)、减(-)、乘()、除(/)。图3.2定义了两个整型变量a和b,然后打印出a和b进行四则运算的结果。字符串类型也可以相加,从而合并成一个新的字符串,通常称之为拼接运算。 图3.2加、减、乘、除运算符 3.2.1求余运算符 求余运算符“%”也叫取模运算符,其计算两个数相除后的余数。只支持整型求余运算,如图3.3所示。 图3.3求余运算符 3.2.2自增自减运算符 Swift 4中去掉了以前版本中的自增运算符“++”和自减运算符“--”,取而代之的是“+=”和“-=”。原来的自增/自减运算符是从C语言中搬过来,使用起来比较灵活,初学者较难理解。另外,自增运算符 “++” 主要用于for循环语句中。而在Swift 4中,forin循环结构已经不再需要使用“++”了。 Swift 4中的自增/自减运算符示例如图3.4所示。 图3.4Swift 4中的自增/自减运算符示例 3.3关系运算符 关系运算符就是用来比较两个值之间关系的运算符,运算结果为布尔值,即true或者false。关系运算符包括等于(==)、不等于(!=)、大于(>)、小于(<)、大于或等于(>=)、小于或等于(<=)。如图3.5所示,定义变量a、b,并赋初值,然后进行各种关系运算,运算结果显示在右侧。关系运算符的运算结果为布尔值,所以关系运算符适用于条件语句。 图3.5关系运算符 3.4逻辑运算符 逻辑运算符包括与(&&)、或(||)、非(!),操作数为布尔型。 逻辑非是一元运算符,即操作数为1个,其真值表见表3.1。表3.1逻辑非运算真值表 a的布尔值!a的布尔值truefalsefalsetrue图3.6定义了电灯开关的状态变量on,初始值为false,即表示灯关着。在if语句中,通过!on判断灯是否关着,如果是,则打印相应信息。 图3.6逻辑非运算符 逻辑与是二元运算符,操作数为2个,其真值表为表3.2。表3.2逻辑与运算符真值表 a的布尔值b的布尔值a&&b的布尔值truetruetruetruefalsefalsefalsetruefalsefalsefalsefalse图3.7定义了控制电灯开关的函数,需要传入两个参数,分别为布尔变量sunshine(表示是否为白天)和indoors(表示是否家里有人)。表示电灯开关的布尔变量为on,on为true的条件是没有阳光,并且家里有人。将sunshine赋值为false,表示没有阳光。同时,将indoors赋值为true,表示家里有人。调用函数lightControl(),将变量sunshine和indoors传入,控制台的输出结果为“turn light on”,即打开电灯。 图3.7电灯开关控制(逻辑与) 逻辑或是二元运算符,操作数是2个,真值表见表3.3。表3.3逻辑或运算符真值表 a的布尔值b的布尔值a||b的布尔值truetruetruetruefalsetruefalsetruetruefalsefalsefalse如图3.8所示,用逻辑或实现电灯开关的功能,需要对前面的代码做如下修改: 将变量名on改为off,当off为true的时候表示应该关灯。将on的逻辑表达式改为off的逻辑表达式,它表示有阳光的时候,或者没人在家的时候,将灯关了。程序运行的输出结果完全一致。可以看出,逻辑与和逻辑或的表达式是可以进行逻辑等价转换的。 图3.8电灯开关控制(逻辑或) 3.5三元运算符 前面介绍了多个一元运算符和二元运算符,本节介绍一种三元运算符,即三元条件运算符。 三元条件运算符有3个操作数,格式为question ? answer1 : answer2其语义为: 如果question为true,则返回answer1;否则返回默认值answer2。 实际上,三元运算符是一种简写方式,其语义与下面的if语句等价。if question: { answer1 } else { answer2 }图3.9定义了3个常量pageHeight、contentHeight、bottomHeight,分别表示页面高度、正文内容高度、底部栏高度,另外还定义了一个布尔型变量hasHeader,用来表示页面中是否要包含一个头部栏。页面高度由正文内容高度、底部栏高度和头部栏高度相加得到。如果hasHeader为true时,头部栏按照30算,否则头部栏按照10算。这就可以通过三元条件运算符便捷地实现。 图3.9三元条件运算符 三元条件运算符可以简洁地表示有条件的二选一语义,但是三元条件运算符的缺点是可读性较差。因此,在表达复杂的组合逻辑时,尽量不使用三元条件运算符。 3.6区间运算符 区间运算符包括闭区间运算符和半闭区间运算符。 闭区间运算符a...b表示一个从a到b的所有值的区间(包括a和b)。闭区间运算符在循环语句中很有用。如图3.10所示,在forin循环中,变量i取0~3的值(包括0、1、2、3),循环执行4次。 半闭区间运算符a..