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篇—(四)运算符的更多相关文章

  1. 李洪强iOS开发Swift篇—04_运算符

    李洪强iOS开发Swift篇—04_运算符 一.运算符 1.Swift所支持的部分运算符有以下一些 赋值运算符:= 复合赋值运算符:+=.-= 算术运算符:+.-.*./ 求余运算符:% 自增.自减运 ...

  2. iOS开发Swift篇—(一)简单介绍

    iOS开发Swift篇—简单介绍 一.简介 Swift是苹果于2014年WWDC(苹果开发者大会)发布的全新编程语言 Swift在天朝译为“雨燕”,是它的LOGO 是一只燕子,跟Objective-C ...

  3. iOS开发Swift篇—(二)变量和常量

    iOS开发Swift篇—(二)变量和常量 一.语言的性能 (1)根据WWDC的展示 在进行复杂对象排序时Objective-C的性能是Python的2.8倍,Swift的性能是Python的3.9倍 ...

  4. iOS开发Swift篇—(三)字符串和数据类型

    iOS开发Swift篇—(三)字符串和数据类型 一.字符串 字符串是String类型的数据,用双引号""包住文字内容  let website = "http://www ...

  5. iOS开发Swift篇—(六)流程控制

    iOS开发Swift篇—(六)流程控制 一.swift中的流程控制 Swift支持的流程结构如下: 循环结构:for.for-in.while.do-while 选择结构:if.switch 注意:这 ...

  6. iOS开发Swift篇—(七)函数(1)

    iOS开发Swift篇—(七)函数 一.函数的定义 (1)函数的定义格式 func 函数名(形参列表) -> 返回值类型 { // 函数体... } (2)形参列表的格式 形参名1: 形参类型1 ...

  7. iOS开发Swift篇—(八)函数(2)

    iOS开发Swift篇—(八)函数(2) 一.函数类型 函数类型也是数据类型的一种,它由形参类型和返回值类型组成,格式是 (形参类型列表) -> 返回值类型 func sum(num1: Int ...

  8. iOS开发Swift篇—(九)属性

    iOS开发Swift篇—(九)属性 一.类的定义 Swift与Objective-C定义类的区别 Objective-C:一般需要2个文件,1个.h声明文件和1个.m实现文件 Swift:只需要1个. ...

  9. iOS开发Swift篇—(十)方法

    iOS开发Swift篇—(十)方法 一.简单说明 跟其他面向对象语言一样,Swift中的方法可以分为2大类: (1)实例方法(Instance Methods) 在OC中,实例方法以减号(-)开头 ( ...

随机推荐

  1. Kindle 推送教程:教你用电子邮箱推送电子书(Kindle伴侣)

    Kindle 推送是什么意思?如何通过电子邮件附件推送?或许刚刚接触 Kindle 的朋友对这个概念不是很清楚,其实所谓 Kindle 推送是指亚马逊提供的一个"Kindle 个人文档服务& ...

  2. SQLite Expert 删除表数据并重置自动增长列

    用下面的语句肯定是行不通的,语句不支持 truncate table t_Records 方法:1.删除表数据 2.重置自动增长列 where name='t_Records' /*name :是表名 ...

  3. Java 之 List<T> 接口的实现:LinkedList

    Collection├List│├LinkedList│├ArrayList│└Vector│ └Stack└SetMap├Hashtable├HashMap└WeakHashMap 隶属于队列Lis ...

  4. 使用plsql执行计划进行sql调优(转载)

    一段SQL代码写好以后,可以通过查看SQL的执行计划,初步预测该SQL在运行时的性能好坏,尤其是在发现某个SQL语句的效率较差时,我们可以通过查看执行计划,分析出该SQL代码的问题所在. 那么,作为开 ...

  5. [attribute] 匹配包含给定属性的元素

    描述: 查找所有含有 id 属性的 div 元素 HTML 代码: <div> <p>Hello!</p> </div> <div id=&quo ...

  6. mysql出现“SELECT list is not in GROUP BY clause and contains nonaggregated column [duplicate]”错误提示

    项目跨平台时由于mysql设置的问题,原代码运行出现这个错误,此时把mysql设置改下就好了 sql_mode='NO_ENGINE_SUBSTITUTION'

  7. Dynamics AX 2012 R3 Demo 安装与配置 - 编译和配置 (Step 3)

        在前两节中,Reinhard主要讲解了如何配置安装环境,安装数据库服务器,AOS和客户端.至此安装工作已经结束,下面Reinhard开始讲解如何编译和配置.     运行客户端后,系统弹出初始 ...

  8. 精彩的解释CAP理论的文章

    强一致性(Consistency):  更新操作成功并返回客户端完成后,分布式的所有节点在同一时间的数据完全一致. 可用性(Availability):读和写操作都能成功. 分区容错性(Partiti ...

  9. MVC系列1-MVC基础

    终于决定写一个系列的文章了,最开始其实是准备写一下WPF的,因为我这两年一直在做WPF,对WPF的喜爱自然是无以言表.但是由于我所在的地区对WPF的普及不是很广泛,所以,被迫又开始做起来web,但是我 ...

  10. JS事件整理

    onclick 鼠标点击事件 ondblclick 鼠标双击事件 onmouseover 鼠标移入事件 onmouseout 鼠标移出事件 onmousedown 鼠标按下事件 onmousemove ...