
该文章翻译自Apple官方文档: The Swift 4 Programming Language
Guards翻译组 正在翻译Swift 4的全套文档,这是该文档第二章节《Basic Operators》的上半部分,第一章节《The Basics》 上半部分请点这里/下半部分请点这里,原文链接: Basic Operators
翻译 : Stevin三天三夜 (Blog / GitHub)
校对 : Jonhory (简书 / GitHub)
@H_404_13@译者心声我们会不定期的更新翻译文章,Guards翻译组本周内会发布 Basic Operators下半部分 章节中文版. 如感兴趣,可以关注<我们的简书,获取翻译组更多文章>
我们是一群热爱翻译并且热爱 Swift 的人, 希望通过自己的努力让不熟悉英语的程序员也能学习到国外的高质量的文章. 如发现文章中翻译错误之处,烦请跟我们联系,我们第一时间更正.
想成为我们中一员? 是的,我们正在招募对翻译感兴趣的小伙伴,如果你想提高阅读英语文档的水平,如果你不甘寂寞,如果你想为广大开发者做点事. QQ:835087646
本篇包含内容:
基本运算符 术语 赋值运算符 算数运算符 求余运算符 一元减号运算符 一元加号 *** 作符 复合赋值运算符 比较运算符 三元条件运算基本运算符
运算符是检查,改变或合并值的特殊符号和短语。比如:加号(+)是将两个数相加,如
let i = 1 + 2,和逻辑AND元运算符(&&)结合两两个布尔值,比如:if enteredDoorCode && passedRetinaScan。
Swift支持多数标准 C *** 作符,并且为了消除常见的编码错误改进了几种特性。例如:赋值运算符(=)没有返回值。防止当使用判等运算符(==)的地方错误地使用它。算术运算符(+,-,*,%等)检测不允许值溢出,来避免保存变量的时候变量取值范围大于或小于其取值范围导致的异常结果。你也可以使用Swift的溢出运算符实现溢出,详见Overflow Operators。
Swift还提供了 C 没有的区间运算符,比如:a..<b和a...b,快捷地表达了区间内的数值。
本章描述了Swift常见的运算符,Advanced Operators这章涵盖了Swift的高级运算符,并且介绍如何自定义运算符和标准实现运算符自定义类型。
术语运算符有一元运算符、二元运算符和三元运算符。
一元运算符针对单个对象 *** 作,比如-a,一元运算符分为前置运算符和后置运算符,前置运算符的运算符在对象前面,如!b,后置运算符的运算符在对象后面,如c!. 二元运算符 *** 作两个对象,如2 + 3,是放在中间的,出现在两个运算对象之间。 三元运算符 *** 作三个对象,像C语言一样,Swift只有一个三元运算符,条件运算符a ? b : c. 运算符影响的值叫 *** 作数,在表达式1 + 2中,+是二元运算符,它的两个 *** 作数是1和2。
赋值运算符(a = b)用b的值初始化或更新了a的值:
let b = 10var a = 5a = b// 此时 a 等于10
如果赋值的右边是一个多元组,那它的元素被分成多个常量或变量:
let (x,y) = (1,2)// 此时 x 等于 1,y 等于 2
Swift的赋值 *** 作符不同于 C 和 Objective-C,它没有返回值,所以下面的代码是错误的:
if x = y { // 这是错误的,因为x = y没有返回值}
这个特性能够防止你使用(==)的时候而错误的写成(=),因为if x = y是无效的,Swift能够帮助你避免这种类型错误的发生。
Swift支持所有数值类型的常见四则运算
加法(+) 减法(-) 乘法(*) 除法(/) 1 + 2 // 等于35 - 3 // 等于22 * 3 // 等于610.0 / 2.5 //等于4.0
Swift的算数运算符不同于 C 和 Objective-C 的是默认情况下不允许溢出。你可以使用Swift的溢出运算符进行溢出运算(如:a &+ b),详见Overflow Operators.
加法运算符也支持String的拼接
"hello," + "world" // 等于 “hello, world”求余运算符
求余运算符(a % b)计算出b的多少倍恰好合适a并且返回剩余的值(称作余数)
NOTE:
在其他语言中求余运算符也叫做取模运算符,然而严格的来说在Swift中它对负数的 *** 作行为,它是一个余数而非取模。
求余计算的方式,计算9 % 4,你先计算出多少个4恰好适合9:
两个4恰好适合9,余数是1(橙色部分显示)
在Swift中表达为:
9 % 4 // 等于1
为了得到a % b的答案,%运算符计算了以下等式并且返回余数作为结果:
a = (b * 倍数) + 余数
当倍数取到最大值的时候乘上b就恰好适合a
把9和4放入等式中
9 = (4 * 2) + 1
相同的方法,可以计算负数
-9 % 4 // 等于-1
把-9和4放入等式可以得到
-9 = (4 * -2) + -1
余数是-1
对于负数b求余的时候,b的符号会被忽略,意味着a % b和a % -b结果是一样的。
数值的符号可以切换使用前缀-,称为一元减号运算符
let three = 3let minusThree = -three //minusThree等于-3let plusThree = -minusThree //plusThree等于3,或“负负3”
一元减号(-)直接在 *** 作数之前,中间没有任何空格
一元加号 *** 作符(+)只是简单地返回了 *** 作数的值,没有做任何改变
let minusSix = -6let alsoMinusSix = +minusSix //alsoMinusSix等于-6
尽管一元加号 *** 作符实际上没有做任何事情,但当你使用一元减号 *** 作符的时候可以使用它来为提供代码提供对称性。
复合赋值运算符想C一样,Swift也提供把赋值运算符(=)和其他运算符结合起来的复合赋值运算符,比如说其中的*加法赋值运
算符*(+=)
var a = 1a += 2a 现在等于 3
表达式a += 2是 a = a + 2的简写,有限地将加法和赋值合成一个运算符同时执行两项任务
NOTE
复合赋值运算符没有返回值,比如说你不能这样写:let b = a += 2
对了,Swift提供的标准库提供的复合赋值 *** 作符完整列表,详见Swift Standard library Operators Reference。
比较运算符Swift支持所有标准 C 语言中的比较运算符
等于(a == b) 不等于(a != b) 大于(a > b) 小于(a < b) 大于等于(a >= b) 小于等于(a <= b) NOTE
Swift也提供了恒等(===)和不恒等(!==)两个比较符用于测试两个对象是否引用同一个对象的实例,更多信息详见Classes and Structures.
每个比较运算符都返回了一个布尔值来标识语句是否为真
1 == 1 //为真,因为1等于12 != 1 //为真,因为2不等于12 > 1 //为真,因为2大于11 < 2 //为真,因为1小于21 >= 1 //为真,因为1大于或小于12 <= 1 //为假,2并不小于或等于1
比较运算符经常用于条件语句,比如if语句
let name = "world"if name == "world" { print("hello,world")} else { print("I'm sorry \(name),but I don't recognize you")}// 输出“hello world”,因为name确实等于“world”
更多短语if语句,详见Control Flow
只要元组中的每个值都相同,你也可以比较相同数量值的元祖。比如:Int和String都可以比较,这意味着类型(Int,String)类型的元组可以比较,相反,布尔值不能比较,这意味着包含布尔值的元祖不能比较。
元组的比较从左到右,每次比较一个值,直到比较发现两个值不相等,比较完这两个值,比较的结果决定了元组比较的总体结果,如果每个元素都相等,那么元组本身也相等,比如:
(1,"zebra") < (2,"apple") //为真,因为1小于2;“zebra”和“apple”不比较(3,"apple") < (3,"bird") //为真,因为3等于3;“apple”小于“bird”(4,"dog") == (4,"dog") //为真,因为4等于4;"dog"等于"dog"
在上面的示例中,第一行左右比较的行为,因为1小于2,就决定(1,"zebra")小于(2,"apple"),而不去考虑元组中的其它值,”zebra“不小于”apple“并不重要,因为元祖的第一个元素已经决定了比较结果,然而,当元组的第一个元素相同的时候,就像第二行和第三行一样,比较他们的第二个元素。
三元条件运算NOTE
Swift标准库包含了少于7个元素的元组比较运算符,七个或更多元素的元祖比较时,你必须自己实现比较运算。
三元条件运算符的特殊性在于它有三部分 *** 作数,像:问题 ? 答案1 : 答案2,这个基于问题真或假决定两个表达式中选出一个的简洁 *** 作。如果问题为真,则返回值为答案1,否则,返回值为答案2.
三元条件 *** 作符简短地描述了下面的代码
if question { answer1 } else { answer2 }
这有一个计算表行高的例子,如果有表头,行高应该高于内容50像素,如果没有表头,高于内容20像素。
let contentHeight = 40let hasheader = truelet rowHeight = contentHeight + (hasheader ? 50 : 20)// 行高等于90
前面的例子要比下面的代码简洁
let contentHeight = 40let hasheader = truelet rowHeight: Intif hasheader { rowHeight = contentHeight + 50} else { rowHeight = contentHeight + 20}// 行高等于90
第一个例子使用了三元条件运算符一行代码就能算出rowHeight,这比第二个例子的代码更简洁。 三元条件运算符为需要考虑的两个表达式提供了高效的简写,然而,使用三元条件运算符也需要谨慎。过度使用会导致简洁的代码变的很难读懂。避开的一个组合语句中使用多个三元条件运算符的情况。
以上是内存溢出为你收集整理的Swift 4官方文档中文版/ Basic Operators(上)全部内容,希望文章能够帮你解决Swift 4官方文档中文版/ Basic Operators(上)所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)