一、简介

  运算符是检查、改变、合并值的特殊符号或者短语。在本篇文章中只介绍基本运算符,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. 2.2 selenium:org.openqa.selenium.WebDriverException: f.QueryInterface is not a function

    来源: http://blog.csdn.net/qiyueqinglian/article/details/47813271 URL中地址写不全的时候,就会报如题错误. url必须是完整的,比如ht ...

  2. MySQL 学习(三)事务学习

    事务隔离级别     SQL标准的事务隔离级别包括:读未提交(read uncommitted).读提交(read committed).可重复读(repeatable read)和串行化(seria ...

  3. FromBase64String 输入的不是有效的 Base-64 字符串,因为它包含非 Base-64 字符、两个以上的填充字符,或者填充字符间包含非法字符

    js前台: <input id="upload_img_input" v-on:change="onFileChange" type="file ...

  4. Java - Test - TestNG: testng.xml 元素 group

    1. 概述 group 相关的元素 groups run 其他相关(不准备提了) package class include exclude 2. 背景 准备 了解了 class 及其子元素 问题 对 ...

  5. CSS学习(2)Id和Class选择器

    id 选择器 id 选择器可以为标有特定 id 的 HTML 元素指定特定的样式. HTML元素以id属性来设置id选择器,CSS 中 id 选择器以 "#" 来定义. 以下的样式 ...

  6. Docker容器里配置计划任务 crontab(DaoCloud+Docker +Laravel5)

    最近项目涉及到一个定时任务的功能,所以去这几天研究了一下 crontab 的使用方法,按照网上的相关教程顺利在自己的电脑上成功开启了这个功能 Laravel + crontab 添加 crontab ...

  7. JAVA 中集合ConcurrentMap

    ConcurrentMap ConcurrentMap,它是一个接口,是一个能够支持并发访问的java.util.map集合 在原有java.util.map接口基础上又新提供了4种方法,进一步扩展了 ...

  8. 普及C组第二题(8.1)

    2000. [2015.8.6普及组模拟赛]Leo搭积木(brick) 题目: Leo是一个快乐的火星人,总是能和地球上的OIers玩得很high.         2012到了,Leo又被召回火星了 ...

  9. Dataguard单机—>单机

    本演示案例所用环境: primary Standby OS Hostname CHINA-DB1 CHINA-DB2 OS Version SUSE Linux Enterprise Server 1 ...

  10. buuctf admin writeup

    熟悉的登陆注册页面,结合结合题目admin的提示,想到是通过修改admin用户密码或伪造admin身份的方式来以admin账户.查看源码,看到了一个hint: 下载下来,是靶场的源码首先尝试抓包分析, ...