Swift 笔记:控制流


Apple-Swift-logo

Swift提供了多种流程控制结构,包括 for-in 循环、while 循环、if 语句、guard 语句、switch 语句、break 语句、continue 语句等。

For-In 循环

for-in 循环可以遍历一个集合中的所有元素:

let names = ["Anna", "Brain", "Jack", "Ryan"]
for name in names {
    print("Hello, \(name)!")
}

for-in 循环也可通过遍历一个字典来访问它的键值对:

let numberOfLegs = ["spider": 8, "ant": 6, "cat": 4]
for (animalName, legCount) in numberOfLegs {
    print("\(animalName)s have \(legCount) legs")
}

for-in 循环可以使用数字范围:

for index in 1...5 {
    print("\(index) times 5 is \(index*5)")
}

如果不需要区间序列内每一项的值,可以使用下划线(_)替代变量名来忽略这个值。

While 循环

while 循环会运行一段语句直到条件变为 false,Swift 提供两种 while 循环形式:

  • while 循环:每次在循环开始时计算条件是否符合
  • repeat-while 循环:每次在循环结束时计算条件是否符合

while

while 循环从计算一个条件开始。如果条件为 true,会重复运行一段语句,直到条件变为 false。其一般格式为:

while condition {  
    statements
}

repeat-while

repeat-while 循环是在判断循环条件之前,先执行一次循环的代码块,然后重复循环直到条件为 false。其一般格式为:

repeat {
    statements
} while condition

条件语句

Swift 提供两种类型的条件语句:if 语句和 switch 语句。通常,当条件较为简单且可能的情况很少时,使用 if 语句。而 switch 语句更适用于条件较复杂、有更多排列组合的时候。

if

if 语句一般格式为:

if condition {
    statements
}

if 语句可以结合 else 或者 else if 语句来处理多个条件执行。

switch

switch 语句最简单的形式就是把某个值与一个或若干个相同类型的值作比较:

switch some value to consider {
case value 1:
    respond to value 1
case value 2,
    value 3:
    respond to value 2 or 3
default:
    otherwise, do something else
}

switch 语句必须是完备的,即每一个可能的值都必须至少有一个 case 分支与之对应。在某些不可能涵盖所有值的情况下,可以使用默认(default)分支来涵盖其它所有没有对应的值,这个默认分支必须在 switch 语句的最后面。

  • 每一个 case 分支都必须包含至少一条语句。
  • case 分支的模式也可以是一个值的区间。
  • 可以使用元组在同一个 switch 语句中测试多个值。元组中的元素可以是值,也可以是区间。另外,可以使用下划线(_)来匹配所有可能的值。
  • case 分支允许将匹配的值声明为临时常量或变量,并且在case分支体内使用,这种行为被称为值绑定(value binding),因为匹配的值在 case 分支体内,与临时的常量或变量绑定。
  • case 分支的模式可以使用 where 语句来判断额外的条件。
  • 复合匹配:当多个条件可以使用同一种方法来处理时,可以将这几种可能放在同一个 case 后面,并且用逗号隔开。

控制转移语句

控制转移语句改变你代码的执行顺序,通过它可以实现代码的跳转。Swift 有五种控制转移语句:

  • continue:告诉一个循环体立刻停止本次循环,重新开始下次循环。
  • break:立刻结束整个控制流的执行。可以在 switch 或循环语句中使用,用来提前结束 switch 或循环语句。
  • fallthrough:简单地使代码继续连接到下一个 case 中的代码。
  • return
  • throw

Guard 语句

if 语句一样,guard 的执行取决于一个表达式的布尔值。可以使用 guard 语句来要求条件必须为真时,以执行 guard 语句后的代码。一个 guard 语句总是有一个 else 从句,如果条件不为真则执行 else 从句中的代码。

检测 API 可用性

Swift内置支持检查 API 可用性,这可以确保我们不会在当前部署机器上,不小心地使用了不可用的API。

一般形式为:

if #available(platform name version, ..., *) {
    APIs 可用,语句将执行
} else {
    APIs 不可用,语句将不执行
}

平台名字可以是iOS,macOSwatchOStvOS 等等。除了指定像 iOS 8 或 macOS 10.10 的大版本号,也可以指定像 iOS 8.3 以及 macOS 10.10.3 的小版本号。

#EOF