控制语句
程序设计中的控制语句有3种,即顺序、分支和循环语句。Swift程序通过控制语句来执行程序流,完成一定的任务。程序流是由若干个语句组成的,语句可以是一条单一的语句,也可以是一个用大括号({})括起来的复合语句。Swift中的控制语句有以下几类:
- 分支语句:if和switch
- 循环语句:while、do while、for和for in
- 跳转语句:break、continue、fallthrough和return
分支语句
分支语句又称为条件语句,条件语句使部分程序可根据某些表达式的值被有选择的执行。Swift编程语言提供了if和switch两种分支语句。
由if语句引导的选择结构有if结构、if else结构和else if结构3种。
if结构
如果条件表达式为true就执行语句组,否则就执行if结构后面的语句。与C和Objective-C语言不同的是,即便语句组是单句,也不能省略大括号。语法结构如下:
if 条件表达式 {
语句组
}
if else结构
所有的语言都有这个结构,而且这个结构的格式基本相同。语句如下:
if 条件表达式 {
语句组1
} else {
语句组2
}
else if结构
结构如下:
if 条件表达式1 {
语句组1
} else if 条件表达式2 {
语句组2
} else if 条件表达式3 {
语句组3
...
} else if 条件表达式n {
语句组n
} else {
语句组n + 1
}
多分支语句switch
switch语句也称开关语句,它提供多分支程序结构。
Swift彻底地颠覆了自C语言以后大家对于swift的认知,这个颠覆表现在两个方面。
一方面,在C、C++、Objective-C、Java甚至是C#语言中,switch语句只能比较离散的单个整数(或可以自动转换为整数)变量, 而Swift中的switch语句可以使用整数、浮点数、字符、字符串和元组等类型,而且它的数值可以是离散的也可以是连续的范围。
另一方面,Swift中的switch语句case分支不需要显式地添加break语句,分支执行完成就会跳出switch语句。
语法结构:
switch 条件表达式 {
case 值1:
语句组1
case 值2, 值3:
语句组2
case 值3:语句组3
...
判断值n:
语句组n
default:
语句组n + 1
}
每个case后面可以跟一个或多个值,多个值之间用逗号分隔。每个switch必须有一个default语句,它放在所有分支后面。每个case中至少要有一条语句。
在swift中使用范围匹配
对于数字类型的比较,switch中的case还可以指定一个范围,如果要比较的值在这个范围内,则执行这个分支。
提示:在定义范围的时候,我们使用闭区间(...)和半闭区间(..<)
- 80...100:80<= 变量<= 100
- 60..<80: 60<= 变量 < 80
在switch中比较元组类型
元组作为多个值的表示方式也可以在switch中进行比较。switch使用元组非常灵活,字段可以是普通值,也可以是范围。
在switch中使用元组还可以使用值绑定和where语句。
1.值绑定
使用元素的时候还可以在case分支中将匹配的值绑定到一个临时的常量或变量,这些常量或变量能够在该分支里使用,这被称为值绑定。
2.where语句
在绑定值得情况下,还可以在case中使用where语句,进行条件的过滤,类似于SQL语句中的where子句。
循环语句
循环语句能够使程序代码重复执行。Swift编程语言支持4种循环构造类型:while、do while、for和for in。for 和 while循环是在执行循环体之前测试循环条件,而do while是在执行循环体之后测试循环条件。这就意味着for 和while循环可能连一次循环体都未执行,而do while将至少执行一次循环体。for in 是for循环的变形,它是专门为集合遍历而设计的。
while语句
while语句是一种先判断的循环结构,格式如下:
while 循环条件 {
语句组
}
while循环没有初始化语句,循环次数是不可知的,只要循环条件满足,循环就会一直进行下去。
使用while循环需要注意几点,while循环条件语句中只能写一个表达式,而且是一个布尔型表达式,那么如果循环体中需要循环变量,就必须在while语句之前对循环变量进行初始化。
提示:死循环对于单线程程序而言是一场灾难,但是在多线程程序中,死循环是必需的,死循环会出现在子线程中。
do while语句
do while语句的使用与while语句相似,不过 do while语句是事后判断循环条件结构,语句格式如下:
do {
语句组
} while 循环条件
do while 循环没有初始化语句,循环次数是不可知的,不管循环条件是否满足,都会先执行一次循环体,然后再判断循环条件。如果条件满足则执行循环体,不满足则停止循环。
for语句
for语句是应用最广泛、功能最强的一种循环语句。一般格式如下:
for 初始化; 循环条件; 迭代 {
语句组
}
初始化、循环条件以及迭代部分都可以为空语句(但分号不能省略), 三者均为空的时候,相当于一个无限循环。
在初始化和迭代部分,可以使用逗号语句来进行多个操作。逗号语句是用逗号分隔的语句序列。
for in语句
Swift提供了一种专门用于遍历集合的for 循环——for in循环。使用for in循环不必按照for 的标准套路编写代码,只需要提供一个集合就可以遍历。
跳转语句
跳转语句能够改变程序的执行顺序,可以实现程序的跳转。Swift有4种跳转语句:break、continue、fallthrough和return。其中return语句与函数返回有关。
break语句
break语句可用于上一节介绍的while、do while、for和for in循环结构,它的作用是强行退出循环结构,不执行循环结构中剩余的语句。
提示:break语句也可用于switch分支语句,但switch默认在每一个分支之后隐式地添加了break,我们一定要显式地添加break才可以使程序运行不受影响。
在循环体中使用break语句有两种方式:可以带有标签,也可以不带标签。语法格式如下:
break //不带标签
break label //带标签,label是标签名
定义标签的时候后面跟一个冒号。不带标签的break语句使程序跳出所在层的循环体,而带标签的break语句使程序跳出标签指示的循环体。
添加标签对于多层嵌套循环是很有必要的,适当使用可以提高程序的执行效率。
continue语句
continue语句用来结束本次循环,跳过循环体中尚未执行的语句,接着进行终止条件的判断,以决定是否继续循环。对于for语句,在进行终止条件的判断前,还要先执行迭代语句。
在循环体中使用continue语句有两种方式可以带有标签,也可以不带标签。语法格式如下:
- continue //不带标签
- continue label //带标签,label是标签名
fallthrough语句
fallthrough是贯通语句,只能使用在switch语句中。为了防止错误的发生,Swift中的switch语句case分支默认不能贯通,即执行完一个case分支就跳出switch语句。但是凡事都有例外,如果你的算法真的需要多个case分支贯通,也可以使用fallthrough语句。
fallthrough就是为了贯穿case分支而设的。或许这种语句我们用的很少,但作为一门编程语言,还是要照顾用户的少数特殊需求。