一、简介

  运算符是检查、改变、合并值的特殊符号或者短语。在本篇文章中只介绍基本运算符,Swift中包含的高级运算符(比如溢出运算符)不在其中。Swift中的运算符和OC中的运算法还是有比较大的区别的,Swift语言这样做的目的是减少常规编码错误。

二、术语

运算符分为一元、二元和三元运算符。

一元运算符分为前置运算符和后置运算符。

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

三、Swift和OC的对比

Swift OC 附加说明
= = Swift与OC不同,Swift的赋值操作不返回任何值
+、-、*、/、-=、+= +、-、*、/、-=、+= Swift中的+可以拼接String
==、!=、>、<、>=、<= ==、!=、>、<、>=、<= 比较运算符可以作用于Swift中的元组
问题 ? 答案1 : 答案2 问题 ? 答案1 : 答案2 特殊情况下的三目运算符可以用空合运算符简化
?? Swift中的空合运算符是为optional类型所产生的
a...b、a..<b OC中并没有对应的区间运算符
!、&&、|| !、&&、|| 与OC使用一致

四、Swift基本运算符的介绍

1、赋值运算符(=)

·这里只需要注意的是Swift与C语言和OC不同,Swift的赋值运算符操作并不返回任何值。

说明:这个特性使得你无法把(==)错写成(=),由于if x = y是错误代码,Swift能帮你避免此类错误的发生。

2、算术运算符(+)

·Swift中所有的数值类型都支持基本的四则算术运算符:加法(+)、减法(-)、乘法(*)、除法(/)

·Swift中的加法运算符还可以用于String的拼接,OC中没有这个特性

·Swift默认情况下不允许在数值运算中出现溢出情况(当然在高级运算符中有溢出运算符来实现溢出运算)。但是OC中是没有这个检查的

3、求余运算符(%)

·求余运算和取模运算是不一样的结果。严格的定义请根据数学上的定义区分

例如计算:-7 Mod 4

那么:a = -7;b = 4;

第一步:求整数商c,如果进行求模运算c = -2(向负无穷方向舍入),求余c = -1(向0方向舍入)

第二步:因为c的值不同,求模时r = 1,求余时r = -3

·为了比较好记忆求余运算的方式,使用a = (b * 倍数) + 余数,当b的最大多少倍刚好能够容入a时,此时的余数就是求余运算的结果

9 % 4

//9 = (4 * 倍数)+ 余数,当倍数等于2时,8刚好容入9,此时余数为1

-9 % 4

//-9 = (4 * 倍数) +余数,当倍数等于-2时,-8刚好容入-9,此时余数为-1

9 % -4

//9 = (-4 *倍数)+余数,当倍数等于-2时,8刚好容入9,此时余数为1

4、一元负号运算符(-)

·一元运算符与操作数之间不要有空格

5、一元正号运算符(+)

·一元运算符与操作数之间不要有空格

6、组合赋值运算符(+=、-=)

·先后完成两个运算任务

7、比较运算符(==、!=、>、<、>=、<=)

·因为Swift中增加了元组数据类型,元组也可以使用比较运算符,采用的是从左到右依次比较,当左边的比较相等才进行右边的比较,以此类推。但是Swift标准库只能比较7个以内元素的元组比较函数。如果元组元素超过7个时,需要自己实现比较运算符。

·Int和String等类型可以比较,Bool类型不能比较。

8、三目运算符(问题 ? 答案1 : 答案2)

·跟OC中的使用一致

9、空合运算符(??)

·空合运算符是根据Swift中出现的可选类型而出现的在特殊情况下对三目运算符的一种简写。

·空合运算符(a ?? b)将对可选类型进行空判断,如果a包含一个值就进行解封,否则就返回一个默认值b。表达式a必须是Optional类型。默认值b的类型必须要和a存储值的类型保存一致。

let defaultColorName = "red"

var userDefinedColorName: String?

var colorNameToUse = a != nil ? userDefinedColorName : defaultColorName

等价于

var colorNameToUse = userDefinedColorName ?? defaultColorName

10、区间运算符(a...b、a..<b)

·闭区间运算符(a...b)定义一个包含从a到b(包括a和b)的所有值的区间。

·半开区间运算符(a..<b)定义一个从a到b但不包括b的区间。

·使用场景经常在for in循环中出现

let names = ["Anna", "Alex", "Brain", "Jack"]

let count = names.count

for i in 0..<count {

  //

}

11、逻辑运算符(!、&&、||)

·逻辑非 、逻辑与、逻辑或,三个逻辑运算符跟OC中的使用保持一致

·不管是Swift还是OC,逻辑操作符&&和||都是在左结合的,这意味着拥有多元逻辑操作符的符合表达式优先计算最左边的子表达式。当然,对于复杂表达式,使用括号来明确优先级更加容易读懂。

Swift3.0-基本运算符的更多相关文章

  1. Swift3.0变化分享

    Swift 3.0 做出的改变很大,在这篇文章中,我将尽我所能,利用代码样例给大家解释Swift 3.0最重要(要命)的改变,希望大家能够做好升级Swift 3.0 的准备.Swift 3.0的改变不 ...

  2. swift3.0变化总结

    Swift 3.0 做出的改变很大,在这篇文章中,我将尽我所能,利用代码样例给大家解释Swift 3.0最重要(要命)的改变,希望大家能够做好升级Swift 3.0 的准备.Swift 3.0的改变不 ...

  3. Swift2.3 --> Swift3.0 的变化

    Swift3.0语法变化 首先和大家分享一下学习新语法的技巧: 用Xcode8打开自己的Swift2.3的项目,选择Edit->Convert->To Current Swift Synt ...

  4. Swift3.0语法变化

    写在前面 首先和大家分享一下学习新语法的技巧:用Xcode8打开自己的Swift2.3的项目,选择Edit->Convert->To Current Swift Syntax- 让Xcod ...

  5. Swift3.0 更新后出现比较运算符方法

    在将项目更新到swift3.0之后,在一些controller头部会出现 比较运算符的方法 // FIXME: comparison operators with optionals were rem ...

  6. Swift3.0服务端开发(一) 完整示例概述及Perfect环境搭建与配置(服务端+iOS端)

    本篇博客算是一个开头,接下来会持续更新使用Swift3.0开发服务端相关的博客.当然,我们使用目前使用Swift开发服务端较为成熟的框架Perfect来实现.Perfect框架是加拿大一个创业团队开发 ...

  7. 算法与数据结构(十三) 冒泡排序、插入排序、希尔排序、选择排序(Swift3.0版)

    本篇博客中的代码实现依然采用Swift3.0来实现.在前几篇博客连续的介绍了关于查找的相关内容, 大约包括线性数据结构的顺序查找.折半查找.插值查找.Fibonacci查找,还包括数结构的二叉排序树以 ...

  8. 关于for循环------swift3.0

    在程序开发当中,for循环使用的频率无疑是最高的.常用的swift循环是递增式遍历.当然各种循环,swift都能办到.但其大多采用关键字形式实现,大部分开发者更喜欢直接使用C式循环代码.在swift3 ...

  9. Swift3.0都有哪些变化

    从写第一篇Swift文章的时候到现在Swift已经从1.2发展到了今天的3.0,这期间由于Swift目前还在发展阶段并不能向下兼容,因此第一篇文章中的部分代码在当前的Xcode环境中已经无法运行.在W ...

  10. iOS开发 swift3.0中文版

    swift3.0中文版: http://pan.baidu.com/s/1nuHqrBb

随机推荐

  1. Catalyst9K设备介绍

    Catalyst9K系列的里面包含了多款交换机,以及无线控制器,甚至包含了无线AP,如下将简单的介绍这几款产品的情况: 首先,这是一种总体的对应关系: 1.Catalyst9200 Series 主要 ...

  2. Maven - skiptest

    1. 概述 maven install 中尝试跳过 单元测试 2. 背景 从别处找来的工程 改了改发现测试过不了 编译都过不了 但又要着急继续调整 就是懒 这种事本来不提倡, 但是生产里数不胜数 Ma ...

  3. 每天进步一点点------如何实现Sobel Edge Detector? (Image Processing) (C/C++)

    使用C與C++/CLI實現Sobel Edge Detector. http://www.cnblogs.com/oomusou/archive/2008/07/23/sobel_edge_detec ...

  4. [Linux kali] Kali KDE桌面安装中文输入法 不能登录系统

    #开始 第一次实体机上面安装kali的KDE桌面版本 结果就遇到了很多的BUG 比如这次就是安装中文输入法有问题 这次安装的是fcitx框架的 尝试了 谷歌输入法 还有搜狗输入法 都有这个问题 也就是 ...

  5. js 判断对象的属性是否存在

    1.in运算符  (属性名 in 对象) 情况1:对象自身属性 var obj={a:1}; "a" in obj//true 情况2:对象继承的属性 var objA={a:1} ...

  6. 牛客小白赛4 C题

    乘法逆元: 一个数a 乘上 b,在mod之后再还原成本来的数 a 这里就要用到乘法逆元,(a*b)%mod*inv(b,mod)==a ll exgcd(ll a,ll b,ll &x,ll ...

  7. 后端——框架——容器框架——spring_core——《官网》阅读笔记——初篇

    1.知识体系 spring-core的知识点大概分为以下几个部分 IOC容器 Bean的配置,XML方式和注解方式 Bean的管理,bean的生命周期,bean的作用域等等 与Bean相关联的接口和对 ...

  8. Educational Codeforces Round 75 (Rated for Div. 2)D(二分)

    #define HAVE_STRUCT_TIMESPEC#include<bits/stdc++.h>using namespace std;pair<int,int>a[20 ...

  9. About Computer Graphics 2.0

    Notes of Computer Graphics 2.0: towards end-user-generated contents CG 1.0 Modeling: construct 3D mo ...

  10. 鸡汤 - Choice is yours

    传送门 https://kamranahmed.info/blog/2018/03/24/choice-is-yours/ Our whole lives are driven by the choi ...