操作员正在检查,更改。归并值特殊符号或短语。例如,加+这两个数字相加(例如let i = 1 + 2)。

算如更复杂的逻辑和操作的实施&&(例如if enteredDoorCode && passedRetinaScan),又或让 i 值加1的便捷运算符自增运算符++i等。

Swift 支持大部分标准 C 语言的运算符,且改进很多特性来降低常规编码错误。如,赋值符(=)不返回值。以防止把想要推断相等运算符(==)的地方写成赋值符导致的错误。

数值运算符(+,-,*。/,%等)会检測并不同意值溢出,以此来避免保存变量时因为变量大于或小于其类型所能承载的范围时导致的异常结果。

当然同意你使用 Swift 的溢出运算符来实现溢出。详情參见溢出运算符。

差别于 C 语言。在 Swift 中你能够对浮点数进行取余运算(%),Swift 还提供了 C 语言没有的表达两数之间的值的区间运算符,(a..b和a...b),这方便我们表达一个区间内的数值。

本章节仅仅描写叙述了 Swift 中的基本运算符,高级运算符包括了高级运算符,及怎样自己定义运算符,及怎样进行自己定义类型的运算符重载。

术语

运算符有一元,二元和三元运算符。

一元运算符对单一操作对象操作(如-a)。

一元运算符分前置符和后置运算符,前置运算符需紧排操作对象之前(如!b),后置运算符需紧跟操作对象之后(如i++)。

二元运算符操作两个操作对象(如2 + 3),是中置的,由于它们出如今两个操作对象之间。

三元运算符操作三个操作对象,和 C 语言一样,Swift 仅仅有一个三元运算符,就是三元条件运算符(a ?

b : c)。

受运算符影响的值叫操作数。在表达式1 + 2中,加号+是二元运算符。它的两个操作数是值1和2。

赋值运算符

赋值运算(a = b)。表示用b的值来初始化或更新a的值:

let b = 10
var a = 5
a = b
// a 如今等于 10

假设赋值的右边是一个多元组,它的元素能够立即被分解多个变量或变量:

let (x, y) = (1, 2)
// 如今 x 等于 1, y 等于 2

与 C 语言和 Objective-C 不同,Swift 的赋值操作并不返回不论什么值。

所以下面代码是错误的:

let (x, y) = (1, 2)
// 如今 x 等于 1, y 等于 2

这个特性使得你无法把(==)错写成(=)了,因为if x = y是错误代码。Swift 从底层帮你避免了这些代码错误。

数值运算

Swift 让全部数值类型都支持了主要的四则运算:

加法(+)

减法(-)

乘法(*)

除法(/)

1 + 2      // 等于 3
5 - 3 // 等于 2
2 * 3 // 等于 6
10.0 / 2.5 // 等于 4.0

与 C 语言和 Objective-C 不同的是,Swift 默认不同意在数值运算中出现溢出情况。但你能够使用Swift 的溢出运算符来达到你有目的的溢出(如a &+ b)。

详情參见溢出运算符。

加法运算符也用于String的拼接:

"hello, " +"world"  // 等于"hello, world"

两个Character值或一个String和一个Character值。相加会生成一个新的String值:

l

et dog: Character = "d"
let cow: Character = "c"
let dogCow = dog + cow
// dogCow 如今是 "dc"

详情參见字符。字符串的拼接。

求余运算

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

注意:

求余运算(%)在其它语言也叫取模运算。然而严格说来。我们看该运算符对负数的操作结果,"求余"比"取模"更合适些。

我们来谈谈取余是怎么回事,计算9 % 4,你先计算出4的多少倍会刚好能够容入9中:

2倍,很好,那余数是1

在 Swift 中这么来表达:

9 % 4   // 等于 1

为了得到a % b的结果,%计算了下面等式,并输出余数作为结果:

a = (b × 倍数) + 余数

当倍数取最大值的时候。就会刚好能够容入a中。

把9和4代入等式中。我们得1:

9 = (4 × 2) + 1

相同的方法。我来们计算 -9 % 4:

-9 % 4  // 等于 -1

把-9和4代入等式,-2是取到的最大整数:

-9 = (4 × -2) + -1

余数是-1。

在对负数b求余时。b的符号会被忽略。这意味着 a % b 和 a % -b的结果是同样的。

浮点数求余计算

不同于 C 语言和 Objective-C,Swift 中是能够对浮点数进行求余的。

8 % 2.5 // 等于 0.5

这个样例中。8除于2.5等于3余0.5,所以结果是一个Double值0.5。

自增和自增运算

和 C 语言一样,Swift 也提供了方便对变量本身加1或减1的自增(++)和自减(--)的运算符。

其操作对象能够是整形和浮点型。 ‌

var i = 0
++i // 如今 i = 1

每调用一次++i,i的值就会加1。实际上,++i是i = i + 1的简写,而--i是i = i - 1的简写。

++和--既是前置又是后置运算。++i,i++,--i和i--都是有效的写法。

我们须要注意的是这些运算符改动了i后有一个返回值。

假设你仅仅想改动i的值。那你就能够忽略这个返回值。但假设你想使用返回值,你就须要留意前置和后置操作的返回值是不同的。

当++前置的时候,先自増再返回。

当++后置的时候。先返回再自增。

比如:

var a = 0
let b = ++a // a 和 b 如今都是 1
let c = a++ // a 如今 2, 但 c 是 a 自增前的值 1

上述样例。let b = ++a先把a加1了再返回a的值。所以a和b都是新值1。

而let c = a++。是先返回了a的值。然后a才加1。所以c得到了a的旧值1,而a加1后变成2。

除非你须要使用i++的特性。不然推荐你使用++i和--i,由于先改动后返回这种行为更符合我们的逻辑。

一元负号

数值的正负号能够使用前缀-(即一元负号)来切换:

let three = 3
let minusThree = -three // minusThree 等于 -3
let plusThree = -minusThree // plusThree 等于 3, 或 "负负3"

一元负号(-)写在操作数之前,中间没有空格。

一元正号

一元正号(+)不做不论什么改变地返回操作数的值。

let minusSix = -6
let alsoMinusSix = +minusSix // alsoMinusSix 等于 -6

尽管一元+做无用功。但当你在使用一元负号来表达负数时,你能够使用一元正号来表达正数,如此你的代码会具有对称美。

复合赋值(Compound Assignment Operators)

如同强大的 C 语言,Swift 也提供把其它运算符和赋值运算(=)组合的复合赋值运算符,加赋运算(+=)是当中一个样例:

var a = 1
a += 2 // a 如今是 3

表达式a += 2是a = a + 2的简写。一个加赋运算就把加法和赋值两件事完毕了。

注意:

复合赋值运算没有返回值,let b = a += 2这类代码是错误。

这不同于上面提到的自增和自减运算符。

在表达式章节里有复合运算符的完整列表。 ‌

比較运算

全部标准 C 语言中的比較运算都能够在 Swift 中使用。

等于(a == b)

不等于(a!= b)

大于(a > b)

小于(a < b)

大于等于(a >= b)

小于等于(a <= b)

注意:

Swift 也提供恒等===和不恒等!==这两个比較符来推断两个对象是否引用同一个对象实例。

很多其它细节在类与结构。

每一个比較运算都返回了一个标识表达式是否成立的布尔值:

1 == 1  // true, 由于 1 等于 1
2 != 1 // true, 由于 2 不等于 1
2 > 1 // true, 由于 2 大于 1
1 < 2 // true, 由于 1 小于2
1 >= 1 // true, 由于 1 大于等于 1
2 <= 1 // false, 由于 2 并不小于等于 1

比較运算多用于条件语句。如if条件:

let name = "world"
if name == "world" {
println("hello, world")
} else {
println("I'm sorry \(name), but I don't recognize you")
}
// 出口 "hello,world", 由于 `name` 它等于 "world"

左右if声明。请参阅控制流。

Swift编程语言学习2.1——基础运营商(在)的更多相关文章

  1. Swift编程语言学习9—— 存储属性和计算属性

    属性将值跟特定的类.结构或枚举关联.存储属性存储常量或变量作为实例的一部分,计算属性计算(而不是存储)一个值.计算属性能够用于类.结构体和枚举里,存储属性仅仅能用于类和结构体. 存储属性和计算属性通经 ...

  2. Swift 编程语言学习0.1——Swift简单介绍

    有的时候,认为看英文文档有些费时,看中文文档怕翻译不准,有些地方确实不须要抠字眼.当有些地方假设翻译不精准会产生歧义,所以用这样对比的方式.顺便学习一下Swift. Swift is a new pr ...

  3. Swift编程语言学习4.1——周期

    Swift它提供了类似 C 流量控制结构语言,它包含运行多个任务的能力for和while周期.选择根据不同的编码分支机构的具体条件来运行if和switch声明,有控制流程跳转到其他代码break和co ...

  4. Swift编程语言学习6—— 闭包

    闭包是自包括的函数代码块,能够在代码中被传递和使用. Swift 中的闭包与 C 和 Objective-C 中的代码块(blocks)以及其它一些编程语言中的 lambdas 函数比較类似.   闭 ...

  5. Swift编程语言学习4.3—— 控制语句

    控制传递语句(Control Transfer Statements) 控制转移语句改变你代码的运行顺序,通过它你能够实现代码的跳转.Swift有四种控制转移语句. continue break fa ...

  6. Swift编程语言学习11—— 枚举全局变量、局部变量与类型属性

    全局变量和局部变量 计算属性和属性监视器所描写叙述的模式也能够用于全局变量和局部变量,全局变量是在函数.方法.闭包或不论什么类型之外定义的变量,局部变量是在函数.方法或闭包内部定义的变量. 前面章节提 ...

  7. Swift编程语言学习1.4——数值型字面量、数值类型转换

    数值型字面量 整数字面量能够被写作: 一个十进制数,没有前缀 一个二进制数,前缀是0b 一个八进制数,前缀是0o 一个十六进制数,前缀是0x 以下的全部整数字面量的十进制值都是17: let deci ...

  8. Swift编程语言学习3.1排列

    Swift 语言提供经典的数组和字典两种集合类型来存储集合数据.数组用来按顺序存储同样类型的数据.字典尽管无序存储同样类型数据值可是须要由独有的标识符引用和寻址(就是键值对). Swift 语言里的数 ...

  9. Swift编程语言学习1.3——类型安全和投机型

    Swift 是类型安全(type safe )语言.类型安全的语言可以让你清楚地知道代码被处理值类型.假设你需要一个代码String.你绝对不能进去一个不小心传球Int. 因为 Swift 它是类型安 ...

随机推荐

  1. App引导页面源代码的实现

    一.页面效果图

  2. 关于MATLAB中any和all的个人理解

    any: any=1,有一个元素是1,即可: any=0,全部元素为0,即可. all: all=1,全部元素是1,即可: all=0,有一个元素是0,即可. ALL True if all elem ...

  3. BZOJ 1012 最大数maxnumber

    Description 现在请求你维护一个数列,要求提供以下两种操作: 1. 查询操作.语法:Q L 功能:查询当前数列中末尾L个数中的最大的数,并输出这个数的值.限制:L不超过当前数列的长度. 2. ...

  4. imx:MfgTool

    MfgTool使用方法: MfgTool很妖,写进去的img的名字一定要符合配置文件里面的命名标准. 具体要参见:        MFG_TOOL\Profiles\Linux\OS Firmware ...

  5. Java判断字符串是中文还是英文

    在做开发的时候我们经常需要用到根据某个字符或者字符串来判断其是中文还是英文,从而做相应的处理,其实不难,大多数人们都是用到正则来判断的,下面小贝就给大家分享一下Java判断字符串是中文还是英文 推荐文 ...

  6. comparable与comparator比较

    两种比较接口分析 前者应该比较固定,和一个具体类相绑定,而后者比较灵活,它可以被用于各个需要比较功能的类使用. 一个类实现了 Camparable 接口表明这个类的对象之间是可以相互比较的.如果用数学 ...

  7. Lucence.Net+添加关键词+分页+排序

    1.使用queryparser完成解析搜索请求 2.基本格式如: QueryParser parser=new QueryParser("字段名称","分析器实例&quo ...

  8. LintCode-最长公共子串

    题目描述: 给出两个字符串,找到最长公共子串,并返回其长度. 注意事项 子串的字符应该连续的出现在原字符串中,这与子序列有所不同. 样例 给出A=“ABCD”,B=“CBCE”,返回 2 public ...

  9. Oracle SQL篇(三)Oracle ROWNUM 与TOP N分析

        首先我们来看一下ROWNUM: 含义解释: 1.rownum是oracle为从查询返回的行的编号,返回的第一行分配的是1,第二行是2,依此类推.这是一个伪列,可以用于限制查询返回的总行数. 2 ...

  10. Protel99se教程四:将SCH转为PCB文件

    本节课,我们介绍,如何快速的将绘制好的SCH文件转为PCB文件,首先,我们打开刚开始时我们绘制的SCH原理图,我们可以使用protel99se菜单栏的view-Fit All Objects命令,以查 ...