Swift3.0-基本运算符
一、简介
运算符是检查、改变、合并值的特殊符号或者短语。在本篇文章中只介绍基本运算符,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-基本运算符的更多相关文章
- Swift3.0变化分享
Swift 3.0 做出的改变很大,在这篇文章中,我将尽我所能,利用代码样例给大家解释Swift 3.0最重要(要命)的改变,希望大家能够做好升级Swift 3.0 的准备.Swift 3.0的改变不 ...
- swift3.0变化总结
Swift 3.0 做出的改变很大,在这篇文章中,我将尽我所能,利用代码样例给大家解释Swift 3.0最重要(要命)的改变,希望大家能够做好升级Swift 3.0 的准备.Swift 3.0的改变不 ...
- Swift2.3 --> Swift3.0 的变化
Swift3.0语法变化 首先和大家分享一下学习新语法的技巧: 用Xcode8打开自己的Swift2.3的项目,选择Edit->Convert->To Current Swift Synt ...
- Swift3.0语法变化
写在前面 首先和大家分享一下学习新语法的技巧:用Xcode8打开自己的Swift2.3的项目,选择Edit->Convert->To Current Swift Syntax- 让Xcod ...
- Swift3.0 更新后出现比较运算符方法
在将项目更新到swift3.0之后,在一些controller头部会出现 比较运算符的方法 // FIXME: comparison operators with optionals were rem ...
- Swift3.0服务端开发(一) 完整示例概述及Perfect环境搭建与配置(服务端+iOS端)
本篇博客算是一个开头,接下来会持续更新使用Swift3.0开发服务端相关的博客.当然,我们使用目前使用Swift开发服务端较为成熟的框架Perfect来实现.Perfect框架是加拿大一个创业团队开发 ...
- 算法与数据结构(十三) 冒泡排序、插入排序、希尔排序、选择排序(Swift3.0版)
本篇博客中的代码实现依然采用Swift3.0来实现.在前几篇博客连续的介绍了关于查找的相关内容, 大约包括线性数据结构的顺序查找.折半查找.插值查找.Fibonacci查找,还包括数结构的二叉排序树以 ...
- 关于for循环------swift3.0
在程序开发当中,for循环使用的频率无疑是最高的.常用的swift循环是递增式遍历.当然各种循环,swift都能办到.但其大多采用关键字形式实现,大部分开发者更喜欢直接使用C式循环代码.在swift3 ...
- Swift3.0都有哪些变化
从写第一篇Swift文章的时候到现在Swift已经从1.2发展到了今天的3.0,这期间由于Swift目前还在发展阶段并不能向下兼容,因此第一篇文章中的部分代码在当前的Xcode环境中已经无法运行.在W ...
- iOS开发 swift3.0中文版
swift3.0中文版: http://pan.baidu.com/s/1nuHqrBb
随机推荐
- IPSec无法建立?注意第一阶段hash sha !
该篇注意记录一下,有些情况下,我们配置了IPSec ,但是就是无法建立,发现连第一阶段都无法建立起来. 1.检查配置无问题 2.开启debug crypto isakmp发现有IKE的重传 3.sho ...
- Android App测试计划和设计测试矩阵
Android APP :日程管理APP 测试计划(Test Plan): 编号 测试时间 测试类型 测试计划 1. 5.1~5.5 单元测试 单元测试是由程序员自己来完成,程序员有责任编写功能代码, ...
- Python 多任务(进程) day1(3)
进程间的通信 可以用socket进行进程间的通信 可以用同意文件来进行通信(但是在硬盘上读取和写入比较慢,内存运行太快了) Queue队列(记得是队列) 在同一内存中通信 因为进程之间不能共享全局变 ...
- MySQL数学函数简明总结
1. ABS(x): 返回x的绝对值 mysql> select ABS(1), ABS(-1), ABS(0); +--------+---------+--------+| ABS(1) | ...
- springboot的安装与初步使用
1.引用springboot框架 1.在maven项目底下的pom.xml的中,引用springboot,如下 <?xml version="1.0" encoding=&q ...
- acm数论之旅--数论四大定理
ACM数论之旅5---数论四大定理(你怕不怕(☆゚∀゚)老实告诉我) (本篇无证明,想要证明的去找度娘)o(*≧▽≦)ツ ----------数论四大定理--------- 数论四大定理: 1.威 ...
- 交换分区swap和日志系统
目录 1.使用系统中的某个文件作为swap分区 1.1创建swapfile 1.2格式化swap分区 1.3检查当前swap分区情况 1.4临时启用新建swap分区并查看情况 1.5 关闭新建的swa ...
- MAC平台基于Python的Appium环境搭建
前言 最近笔者要为python+appium课程做准备,mac在2019年重新安装了一次系统,这次重新在mac下搭建appium环境,刚好顺带写个文稿给大家分享分享搭建过程. 一.环境和所需软件概述 ...
- Java JDK 1.5 1.6 1.7 新特性整理
Java JDK 1.5的新特性 1.泛型 List<String> strs = new ArrayList<String>();//给集合指定存入类型,上面这个集合在存入数 ...
- 【C语言】输入一个正整数,判断其是否为素数
素数的定义: 素数(prime number)又称质数,有无限个. 素数定义为在大于1的自然数中,除了1和它本身以外不再有其他因数,这样的数称为素数.代码1: #include<stdio.h& ...