一、简介

  运算符是检查、改变、合并值的特殊符号或者短语。在本篇文章中只介绍基本运算符,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. hdu 4280 最大流 sap模板

    给你岛的坐标求最西边到最东边的最大流 /* 最大流模板 sap */ #include<stdio.h> #include<string.h> #include<algo ...

  2. C4K Power supply failed?

    故障log: %C4K_IOSMODPORTMAN-4-POWERSUPPLYBAD: Power supply 2 has failed or been turned off 在单机的情况下,我们可 ...

  3. 委托与事件--delegate&&event

    委托 访问修饰符 delegate 返回值 委托名(参数); public delegate void NoReturnNoPara(); public void NoReturnNoParaMeth ...

  4. MyBatis-Spring整合之方式4

    直接删除Mybatis的配置文件,修改Beans.xml文件的sqlSessionFactory的参数内容,如下: <!--配置sqlSessionFactory--> <bean ...

  5. Java代码三级跳——表达式、语句和代码块

    Java代码三级跳—表达式.语句和代码块 表达式(expression):Java中最基本的一个运算.比如一个加法运算表达式.1+2是一个表达式,a+b也是. 语句(statement):类似于平时说 ...

  6. 萌新深度学习与Pytorch入门记录(一):Win10下环境安装

    深度学习从入门到入土,安装软件及配置环境踩了不少坑,过程中参考了多处博主给的解决方法,遂整合一下自己的采坑记录. (若遇到不一样的错误,请参考其他博主答案解决) 笔者电脑系统为win10系统,在此环境 ...

  7. ASP.NET Core搭建多层网站架构【3-xUnit单元测试之简单方法测试】

    2020/01/28, ASP.NET Core 3.1, VS2019, xUnit 2.4.0 摘要:基于ASP.NET Core 3.1 WebApi搭建后端多层网站架构[3-xUnit单元测试 ...

  8. leetCode练题——28. Implement strStr()

    1.题目 28. Implement strStr()——Easy Implement strStr(). Return the index of the first occurrence of ne ...

  9. 聊聊面试中常问的GC机制

    GC 中文直译垃圾回收,是一种回收内存空间避免内存泄漏的机制.当 JVM 内存紧张,通过执行 GC 有效回收内存,转而分配给新对象从而实现内存的再利用. JVM GC 机制虽然无需开发主动参与,减轻不 ...

  10. Linux - Zip乱码问题

    1. 可以通过解压后使用convmv来解决文件名乱码问题,通过iconv来解决文件内容的乱码问题 2. 用unar命令