操作员正在检查,更改。归并值特殊符号或短语。例如,加+这两个数字相加(例如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的值:

  1. let b = 10
  2. var a = 5
  3. a = b
  4. // a 如今等于 10

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

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

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

所以下面代码是错误的:

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

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

数值运算

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

加法(+)

减法(-)

乘法(*)

除法(/)

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

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

详情參见溢出运算符。

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

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

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

l

  1. et dog: Character = "d"
  2. let cow: Character = "c"
  3. let dogCow = dog + cow
  4. // dogCow 如今是 "dc"

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

求余运算

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

注意:

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

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

2倍,很好,那余数是1

在 Swift 中这么来表达:

  1. 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 中是能够对浮点数进行求余的。

  1. 8 % 2.5 // 等于 0.5

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

自增和自增运算

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

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

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

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

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

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

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

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

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

比如:

  1. var a = 0
  2. let b = ++a // a 和 b 如今都是 1
  3. 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,由于先改动后返回这种行为更符合我们的逻辑。

一元负号

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

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

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

一元正号

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

  1. let minusSix = -6
  2. let alsoMinusSix = +minusSix // alsoMinusSix 等于 -6

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

复合赋值(Compound Assignment Operators)

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

  1. var a = 1
  2. 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 == 1 // true, 由于 1 等于 1
  2. 2 != 1 // true, 由于 2 不等于 1
  3. 2 > 1 // true, 由于 2 大于 1
  4. 1 < 2 // true, 由于 1 小于2
  5. 1 >= 1 // true, 由于 1 大于等于 1
  6. 2 <= 1 // false, 由于 2 并不小于等于 1

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

  1. let name = "world"
  2. if name == "world" {
  3. println("hello, world")
  4. } else {
  5. println("I'm sorry \(name), but I don't recognize you")
  6. }
  7. // 出口 "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. 防止 XSS 攻击 解决方案

    XSS又叫CSS英文缩写为Cross Site Script中文意思为跨站脚本攻击具体内容指的是恶意攻击者往Web页面里插入恶意html代码,当用户浏览该页之时,嵌入其中Web里面的html代码会被执 ...

  2. CTRL+A, CTRL+C, CTRL+V

    (http://leetcode.com/2011/01/ctrla-ctrlc-ctrlv.html) Imagine you have a special keyboard with the fo ...

  3. Android应用开发基础篇(11)-----ViewFlipper

    链接地址:http://www.cnblogs.com/lknlfy/archive/2012/03/01/2376067.html 一.概述 ViewFlipper这个部件是用来实现多页显示的,多页 ...

  4. JDK JRE先保存 后面再整理

    1. 定义 JRE(Java Runtime Enviroment)是Java的运行环境.面向Java程序的使用者,而不是开发者.如果你仅下载并安装了JRE,那么你的系统只能运行Java程 序.JRE ...

  5. synchronized和vilatile

    第一个程序 public class Test06 implements Runnable{ public int a = 0; public static void main(String[] ar ...

  6. 射频识别技术漫谈(18)——Mifare Desfire

    Mifare  DESFire(MF3 IC D40/D41,本文以D40为例)遵守14443 TypeA协议,卡内的数据以文件形式存储,所以有人认为它是准CPU卡,主要用于安全性要求较高的非接触式领 ...

  7. 08.net网站开发(前端):5.jQuery

    开发网站肯定要会JS,嫌代码太难看难学那至少要学会jQuery.当然我见过有些项目纯用服务端控件也是能做出来的,但我相信,那些碰到复杂的需求的话肯定很棘手的.jQuery是对JS和DOM的封装,少量代 ...

  8. hdu 1085 Holding Bin-Laden Captive! (母函数)

    //给你面值为1,2,5的三种硬币固定的数目,求不能凑出的最小钱数 //G(x)=(1+x+...+x^num1)(1+x^2+...+x^2num2)(1+x^5+,,,+x^5num3), //展 ...

  9. Orchard站点性能优化-预热

    Orchard CMS 包含一个 Warmup Module 模块,当我们的站点在共享主机上的时候,它可以显著的帮助我们快速响应用户访问请求.当你开启这个模块以后,你设置的URL的里面的内容会缓存起来 ...

  10. Oracle数据库的启动和关闭实例

    在开始了解oracle数据库的命令之前,先来看一个东西:SQL*PLUS(sqlplus) Oracle的sql*plus是与oracle进行交互的客户端工具.在sql*plus中,可以运行sql*p ...