iOS开发Swift篇—(四)运算符
iOS开发Swift篇—(四)运算符
一、运算符
1.Swift所支持的部分运算符有以下一些
赋值运算符:=
复合赋值运算符:+=、-=
算术运算符:+、-、*、/
求余运算符:%
自增、自减运算符:++、--
比较运算符:==、!=、>、<、>=、<=
逻辑运算符:&&、||、!
三目运算符:? :
范围运算符:..< 、...
溢出运算符:&+、&-、&*、&/、&%
2.赋值运算符
(1)1对1赋值
var a = 5
let b = 20
(2)N对N赋值(元组)
let (x, y) = (1, 2) // x的值是1,y的值是2,并且都是常量
注意:跟C\OC不一样的是:Swift的赋值运算符没有返回值
if (x = y) { }
// 上面的代码是错误的,因为x = y并没有返回具体的值
说明:这样的好处是防止误用 = 和 ==
3.算术运算符
简单使用
1 + 2 // 3
5 - 3 // 2
2 * 3 // 6
10.0 / 2.5 // 4.0
"http://" + "www.wendingding.cn" // "http://www.wendingding.cn"
4.求余运算符
%在Swift中叫“求余运算符”,也有语言叫做“模运算符”
9 % 4 // 1
-9 % 4 // -1
9 % -4 // 1
-9 % -4 // -1
提示:求余结果的正负跟%左边数值的正负一样
注意:跟C语言不一样的是,Swift的%支持浮点数的计算
8 % 2.5 // 0.5

5.Bool类型
Bool类型,也被称为逻辑类型(Logical),就2种取值
true:真
false:假
注意:在C语言中:0是假,非0就是真;而在Swift中没有这种概念
if语句的条件必须是Bool类型的值
(1)错误写法
if (10) {
println("条件成立")
}
(2)正确写法
if (true) {
println("条件成立")
}
6.三目运算符
比较运算符\逻辑运算符会返回Bool类型的值,取值有2种可能
true:真,6 > 5,(7 > 6) && (9 != 7)
false:假,6 < 5,(7 >= 6) && (9 == 7)
三目运算符的条件必须是Bool类型的值
(1)错误写法
let a = 10
let c = a ? 100 : 200
(2)正确写法
let c = a != 0 ? 100 : 200
let c = false ? 100 : 200
7.范围运算符
范围运算符用来表示一个范围,有2种类型的范围运算符
闭合范围运算符:a...b,表示[a, b],包含a和b
半闭合范围运算符:a..<b,表示[a, b),包含a,不包含b
举例:

// index的值从1~5

// index的值从1~4
8.溢出运算符
(1)简单说明
每种数据类型都有自己的取值范围,默认情况下,一旦赋了一个超出取值范围的数值,会产生编译或者运行时错误
注意:下面的写法是错误的
let x = UInt8.max
let y = x + 1
第2行代码会在运行时报错(运行时错误)

提示:上面是运行时错误,下面的错误提示是编译时错误。

Swfit为整型计算提供了5个&开头的溢出运算符,能对超出取值范围的数值进行灵活处理
溢出加法 &+
溢出减法 &-
溢出乘法 &*
溢出除法 &/
溢出求余 &%
(2)值的上溢
let x = UInt8.max
let y = x &+ 1
第1行代码过后:x的值是 255(最大值)
第2行代码过后:y的值是 0(最小值)

(3)值的下溢
let x = UInt8.min
let y = x &- 1
第1行代码过后:x的值是 0(最小值)
第2行代码过后:y的值是 255(最大值)

有符号整数也有类似的溢出现象
let x = Int8.min
let y = x &- 1
第1行代码过后:x的值是 -128(最小值)
第2行代码过后:y的值是 127(最大值)

(4)除零溢出
默认情况下,一个数除于0,或者对0求余数,编译器会直接报错
let x = 10
let y = x / 0
let z = x % 0
第2、3行代码:编译器都会报错
如果使用溢出运算符,就不会报错
let x = 10
let y = x &/ 0
let z = x &% 0
y和z的值最终都是0
二、断言
1.简单说明
断言是一种实时检测条件是否为true的方法
如果条件为true,那么代码继续执行
如果条件为false,就抛出错误信息,直接终止程序的运行
2.断言的用法
使用全局的assert函数
assert函数接收一个Bool表达式和一个断言失败时显示的消息
assert(index >= 0, "index必须大于0")
如果index大于等于0,就继续执行后面的代码
如果index小于0,就抛出错误信息(下面的黑色字),直接终止程序的运行
assertion failed: index必须大于0
assert(index >= 0)
可以省略错误信息,但不推荐,这样不利于调试
3.使用场景和注意
(1)下面的场景,可能用到断言
检测数组的索引:不能太小或者太大,否则造成数组越界
检测传递给函数的参数:如果是无效参数,将不能在该函数中使用
(2)断言的使用注意
断言会导致程序运行的中止,如果不管条件是否成立,都要继续往下执行代码,那就不能用断言
断言可以保证错误在开发过程中会被及时发现,但发布的应用里最好不要使用
如果一个程序用着用着就突然崩溃闪退,会严重影响用户体验
iOS开发Swift篇—(四)运算符的更多相关文章
- 李洪强iOS开发Swift篇—04_运算符
李洪强iOS开发Swift篇—04_运算符 一.运算符 1.Swift所支持的部分运算符有以下一些 赋值运算符:= 复合赋值运算符:+=.-= 算术运算符:+.-.*./ 求余运算符:% 自增.自减运 ...
- iOS开发Swift篇—(一)简单介绍
iOS开发Swift篇—简单介绍 一.简介 Swift是苹果于2014年WWDC(苹果开发者大会)发布的全新编程语言 Swift在天朝译为“雨燕”,是它的LOGO 是一只燕子,跟Objective-C ...
- iOS开发Swift篇—(二)变量和常量
iOS开发Swift篇—(二)变量和常量 一.语言的性能 (1)根据WWDC的展示 在进行复杂对象排序时Objective-C的性能是Python的2.8倍,Swift的性能是Python的3.9倍 ...
- iOS开发Swift篇—(三)字符串和数据类型
iOS开发Swift篇—(三)字符串和数据类型 一.字符串 字符串是String类型的数据,用双引号""包住文字内容 let website = "http://www ...
- iOS开发Swift篇—(六)流程控制
iOS开发Swift篇—(六)流程控制 一.swift中的流程控制 Swift支持的流程结构如下: 循环结构:for.for-in.while.do-while 选择结构:if.switch 注意:这 ...
- iOS开发Swift篇—(七)函数(1)
iOS开发Swift篇—(七)函数 一.函数的定义 (1)函数的定义格式 func 函数名(形参列表) -> 返回值类型 { // 函数体... } (2)形参列表的格式 形参名1: 形参类型1 ...
- iOS开发Swift篇—(八)函数(2)
iOS开发Swift篇—(八)函数(2) 一.函数类型 函数类型也是数据类型的一种,它由形参类型和返回值类型组成,格式是 (形参类型列表) -> 返回值类型 func sum(num1: Int ...
- iOS开发Swift篇—(九)属性
iOS开发Swift篇—(九)属性 一.类的定义 Swift与Objective-C定义类的区别 Objective-C:一般需要2个文件,1个.h声明文件和1个.m实现文件 Swift:只需要1个. ...
- iOS开发Swift篇—(十)方法
iOS开发Swift篇—(十)方法 一.简单说明 跟其他面向对象语言一样,Swift中的方法可以分为2大类: (1)实例方法(Instance Methods) 在OC中,实例方法以减号(-)开头 ( ...
随机推荐
- 【Selenium】4.创建你的第一个Selenium IDE脚本
http://newtours.demoaut.com/ 这个网站将会用来作为我们测试的网址. 通过录制来创建一个脚本 让我们来用最普遍的方法——录制来创建一个脚本.然后,我们将会用回放的功能来执行录 ...
- [原创]java WEB学习笔记102:Spring学习---Spring Bean配置:bean配置方式(工厂方法(静态工厂方法 & 实例工厂方法)、FactoryBean) 全类名
本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱 ...
- CSS3:transform translate transition 这些都是什么?
transform:一个属性名称,即CSS3 2D转换 属性. translate:一个属性函数,用法是translate(dx,dy) div { transform: translate(50px ...
- 初识Python第二天(1)
在Python中,一切事物都是对象,对象是基于类创建的,对象继承了类的属性,方法等. 一.传递参数 1.1新建python文件,名为twoday_args.py,输出以下代码 import sys p ...
- 将数组里的元素拼接成sql里的in条件
/** * 将数组里的元素拼接成sql里的in条件,如'a1','a2','a3' * @param array * @returns */function makeSqlInStr(array){ ...
- asp.net core 通过 TeamCity 实现持续集成笔记
0x00 很早之前就想体验一把持续集成的快感,然后刚好手头上有个 asp.net core 的项目,就想来部署一下持续集成.一开始我是想用 Jenkins 的,弄了好半天,git 仓库没法同步下来,我 ...
- [问题2014A06] 复旦高等代数 I(14级)每周一题(第八教学周)
[问题2014A06] 若 \(n\) 阶实方阵 \(A\) 满足 \(AA'=I_n\), 则称为正交矩阵. 证明: 不存在 \(n\) 阶正交矩阵 \(A,B\) 满足 \(A^2=cAB+B^ ...
- 在FireFox中安装Selenium IDE
第二步:点击查看更多,查找Selenium IDE,安装 第三步:安装好后,在顶部的工具栏里点击"工具",弹出的选项框里出现Selenium IDE,安装完毕.
- Exchange Server 2013就地存档
9.1就地存档 就地存档有助于重新获得对组织邮件数据的控制,而无需个人存储 (.pst) 文件,并且允许用户在可通过 Microsoft Outlook 2010及更高版本和 Microsoft Of ...
- <转>关闭 程序崩溃时 windows 正在检查该问题的解决方案
本文转自:http://www.cnblogs.com/dabaopku/archive/2011/07/04/2097029.html 尤其是使用visual studio开发程序 ,自己特意thr ...