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

      btn.layer.cornerRdius = width/2.0;btn.layer.maskToBounds = width/2.0:   

  2. Servlet之ServletContext以及文件操作

    ServletContext ------------------------------------ ServletContext是什么? 与cookie,session比较. 可以把它想象成一个共 ...

  3. php基础知识(每天分享一些以前的笔记希望能帮助自学的朋友)

    php基础(第一天) php标签 1.  要知道php是一种嵌入html文档的脚本语言:php语法格式是:<?php 想要写的内容 ?>红色体就是php的标签,注意这些标签都要在英式输入法 ...

  4. python笔记之第一次使用(未入门)

    刚开始学习python,之前完全没有接触,在这里写下自己学习python的过程和心得. 首先,安装python,打开官网:http://python.org.点击Download.我选择了3.5.1版 ...

  5. web开发注意的一些事

    js命名不要包含"-",在chrome浏览器是测试发现,如果文件包含"-",即使指定js本地缓存了,还会向服务器发送请求. cookie path 区分大小写

  6. Nginx工作原理和优化、漏洞(转)

    查看安装了哪些模块命令: [root@RG-PowerCache-X xcache]# nginx/sbin/nginx -Vnginx version: nginx/1.2.3built by gc ...

  7. perl5 第一章 概述

    第一章 概述 by flamephoenix 一.Perl是什么?二.Perl在哪里?三.运行四.注释 一.Perl是什么?      Perl是Practical Extraction and Re ...

  8. [C++ Basic] Const 用法

    定义: const 主要用于声明常量.当常量为对象时,对象值不可改变:当常量为指针时,该指针不可移动或重新赋值,但我们可以通过它去修改该指针的指向对象的值(前提是无需移动指针的修改).所谓的形参.返回 ...

  9. 【数位dp】【HDU 3555】【HDU 2089】数位DP入门题

    [HDU  3555]原题直通车: 代码: // 31MS 900K 909 B G++ #include<iostream> #include<cstdio> #includ ...

  10. 编译和安装shibboleth-sp遇到的问题

    In file included from mod_shib_20.cpp:68: mod_shib.cpp:118: warning: deprecated conversion from stri ...