一、简介

  运算符是检查、改变、合并值的特殊符号或者短语。在本篇文章中只介绍基本运算符,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. 吴裕雄 python 机器学习——数据预处理二元化OneHotEncoder模型

    from sklearn.preprocessing import OneHotEncoder #数据预处理二元化OneHotEncoder模型 def test_OneHotEncoder(): X ...

  2. 关于AutoCompleteTextView的用法:根据输入的自动匹配关键词

  3. 排序:ORDER BY

    1.按照字段值进行排序: 语法:order by 字段 升序|降序 (asc|desc) 默认情况下为“升序” asc.asc=ascending 升 desc=descending 降 2.允许多字 ...

  4. 每日扫盲(一):java的rmi

    JAVA RMI 原理和使用浅析 本地对象调用 我们先看看本地对象方法的调用: ObjectClass objectA = new ObjectClass(); String retn = objec ...

  5. javacript onclick事件中传递参数

    var user = {id:1, name:'zhangsan'}; var object = '<a onclick="conversion(' + JSON.stringify( ...

  6. Python实现一个桌面版的翻译工具【新手必学】

      Python 用了好长一段时间了,起初是基于对爬虫的兴趣而接触到的.随着不断的深入,慢慢的转了其它语言,毕竟工作机会真的太少了.很多技能长时间不去用,就会出现遗忘,也就有了整理一下,供初学者学习和 ...

  7. Springmvc-crud-06(路径忘记加上“/”错误)

    错误: 原因:自己马虎忘记加"  /  ",罚继续写代码┭┮﹏┭┮ 前端代码: <h1>添加功能</h1> <form action="te ...

  8. 【PAT甲级】1090 Highest Price in Supply Chain (25 分)

    题意: 输入一个正整数N(<=1e5),和两个小数r和f,表示树的结点总数和商品的原价以及每向下一层价格升高的幅度.下一行输入N个结点的父结点,-1表示为根节点.输出最深的叶子结点处购买商品的价 ...

  9. 基于SILVACO ATLAS的a-IGZO薄膜晶体管二维器件仿真(05)

    关于特性曲线的输出调整: 初代版本 material material=igzo eg300=3.5 nc300=8.5e21 nv300=8.5e21 taun0=1e-9 taup0=1e-9 a ...

  10. C++基础之字符串string

    C++基础之字符串string 标准库类型string表示可变长的字符序列,使用string类型必须首先包含string头文件.作为标准裤的一部分,string定义在命名空间std中. 定义和初始化s ...