Swift提供了很多流程控制语法,包括可以通过使用while
循环来重复执行一个任务,可以通过if
、guard
和switch
来进行条件判断从而执行不同代码分支,可以通过break
和continue
来跳转到特定代码位置。
Swift也提供了诸如可以通过for-in
循环来遍历数组,字典,区间(range),字符串和其他一些序列(sequences)。
Swift的switch
语句相对比C语言的强大
(该关键字与其他多数语言不同,至于算不算优点,意见保留)。在Swift中,该语句中的case
语法不会自动流转到下一个case
,这避免了像C语言中因为缺失break
语句导致的错误。而Swift中的Case语句也相对比较强大,可以匹配多种包括整型、元组、转换的特殊类型等形式。在Case语句中匹配的值可以被绑定到一个临时的常量或者变量中,从而在case
语句对一个的代码块(body)中使用,一些复杂的匹配可以通过使用where
表达式进行。
for-in 循环
可以使用for-in
循环来遍历一个序列,比如一个区间(range)中的数字、数组中的元素、字符串的字符,例如:
|
|
while循环
while的代码块会一直被执行,知道条件变为flase。这类循环主要用在不确定遍历次数的情况下,Swift提供了两种while循环语法:while
和repeat-while
while
while循环是以一个简单的bool条件式开始,当该条件为true的时,循环体会一直被执行。知道条件变为false。语法如下:
|
|
repeat-while
与while
不同的是,repeat-while
循环会首先执行以下循环体,然后判断条件是否为true。和其他语言中的do-while
循环类似。语法如下:
|
|
分支判断
根据特定的条件执行对应的处理代码是很常用的,Swift提供了两种分支判断语法:if
和switch
,通常情况下if
用在简单的分支判断,switch
用在比较复杂的场合。
if
if语句包含一个条件,如果条件为true,则执行紧接着的语句集合。否则执行else (if) 对应的语句集合(如果不关心else (if) 的情况,该部分可以不写)。
switch
switch语句将一个值和多种匹配的模式进行比较,然后根据第一
个合适的配结果执行对应的代码块,语法格式如下:
|
|
switch语句包含多个情况,每个case语句都代表一个分支。switch语句必须列举出所有情况,也就是说case分支必须能够匹配所有可能的情况,如果case不能完全匹配,则需要通过关键字default
在最后位置定义一个默认的分支,例如:
|
|
不存在隐式穿透(No Implicit Fallthrough)
和C与ObjC语言中的Switch语法不同的是,Swift中的switch语法默认情况下在case语句执行完成后不会自动匹配下一个case语句,而是当第一个匹配case分支执行之后马上结束,你不需要像其他语言那样为每个case写上一个break关键字。(尽管break在swift中switch中是非必需的,但你可以使用它来中断一些代码的执行)。如果想自动匹配下一个,则需要使用关键字fallthrough
。
每一条case分支必须包含至少一个可执行语句,比如以下代码会引起编译时错误
|
|
一条case分支可以匹配多个值,用逗号,
隔开,比如上述代码会引起编译时错误可以通过以下写法来解决
|
|
区间匹配
switch中的值可以进行区间匹配,比如:
|
|
元组
可以通过使用下划线_
来匹配任意一个元素,如果存在多个匹配,默认情况下执行第一个匹配的case,其他case会被忽略。代码比较清楚:
|
|
值绑定
在switch的case语句中,可以将匹配的值绑定给一个临时的常量或者变量,在case的body中使用。例如:
|
|
where
一个case语句中可以使用where语法进行额外的匹配检查,比如:
|
|
复合匹配
在case中通过逗号,
隔开匹配内容。复合匹配也可以包含值绑定,在复合匹配中,无论哪个部分匹配上,case的body都会被执行。例如:
|
|
控制转移语句
swift提供了5个流程控制转移语句:continue
、break
、fallthrough
、return
、throw
。
除了fallthrough
,其他四个关键字与C等语言中的基本相同,swift中的switch语句默认情况下不存在隐式穿透,如果想要支持,则需要在case语句后添加fallthrough
,(注:该关键字不检查即将进入的case条件)例如:
|
|
标签语法
循环或条件语句可以嵌套,可以通过break语法结束当前代码块的执行,如果有多个嵌套的循环,明确哪个循环是非常有用的,为了实现这个目标,你可以使用标签语法。标签语法是由名字和冒号:
组成。例如一个while循环的标签如下:
|
|
提前退出
和if
语法类似,guard
语法语句的执行取决于一个bool表达式。可以使用guard
语法来确保在特定条件成立的情况下执行某些代码。和if
不同的是,guard
语法在条件表达式为false时会执行else
块中的内容。例如:
|
|
API有效性检查
可以在if
或guard
语句中使用availability
条件。其中平台比如:iOS
, macOS
, watchOS
, 和 tvOS
,语法格式如下
|
|
具体写法例如:
|
|
参照文档
>
>
Copyright (c) liangtong. All rights reserved.