和所有其它编程语言一样,为了能够控制程序的执行路径,Swift提供了我们熟悉的循环和分支判断语句。它们大多和字面上的直观表意相同,在这一节中,我们就快速过一遍它们的基本用法。

条件分支判断语句

第一个要介绍的,是if...else if...else...。这是几乎每种语言都支持的分支表达方式,其中else ifelse都是可选的部分,它们可以单独和if搭配形式各种分支条件的判断。基本上,看到代码,我们就可以直接了解这类判断的含义了。

var light = "red"
var action = ""

if light == "red" {
    action = "stop"
}
else if light == "yellow" {
    action = "caution"
}
else if light == "green" {
    action = "go"
}
else {
    action = "invalid"
}

在上面这个红绿灯的代码里,我们不断根据light的值,设置了变量action的值,它很简单。但通常,我们还是更多会使用if...else...表示非黑即白这样的简单关系。

对于上面这种存在多种可能性的情况,在Swift里,我们通常还是会使用switch...case...来表示,它比if...else...更安全,也更有更好的表意:

switch light {
    case "red":
        action = "stop"
    case "yellow":
        action = "caution"
    case "green":
        action = "go"
    default:
        action = "invalid"
}

这里,我们使用switch...case...表达了和之前的if...else...相同的语义。但是,它更明确的表达了当light的值(switch)为各种情况(case)时,我们应该采取哪些措施,这样的概念。

但和C++/Java这样语言相比,Swift中的switch...case...也有一些自己独特的地方:

首先,case语句必须exhausitive,也就是说,必须覆盖switch后面出现的表达式的所有情况,否则会导致编译错误。例如,我们去掉default,就会得到下面的错误:

Common loop and branches

因此,当你不需要对列出case的其他情况作出处理时,你也要在default分支写上一句break,明确表示你考虑到了其他的情况,只是你不需要更多额外处理而已。

其次,每个case语句不会自动“贯通”到下一个case,因此我们也无需在每个case最后一行写break表示结束;

最后,当我们要在一个case里匹配多个条件的时候,可以使用逗号把多个条件分开,在后面的视频里,我们会看到这个用法。

以上,就是和分支条件相关的两个最基本的场景和用法,接下来,我们了解循环。

循环控制语句

第一个要介绍的,是for element in collection/range,我们可以用它来方便的遍历一个集合类型或者范围:

let vowel = ["a", "e", "i", "o", "u"]

for char in vowel {
    print(char)
}
// aeiou

for number in 1...10 {
    print(number)
}
// 12345678910

要说明的是,传统C风格的三段式for循环,已经在Swift 3中被移除了:

// DO NOT use this style of for loop
// for var i = 0; i < 10; i += 1 {
//    print(i)
// }

第二个循环的方式是while,它有前置判断和后置判断两种形式,基本上保留了原汁原味的C用法:

// while

var i  = 0
while i < 10 {
    print(i)
    i += 1
}

// do ... while
repeat {
    print(i)
    i -= 1
} while i > 0

在这两类循环里,我们都可以用continue来停止执行当前循环中的语句,立即开始下一次循环。例如,打印所有的偶数:

for number in 1...10 {
    if number % 2 != 0 { continue }
    print(number)
}
// 2 4 6 8 10

在这个例子里,如果number是奇数,就会执行到continue,当前循环就停止并自动进入下一次循环了。

或者,我们也可以使用break来终止整个循环。例如,值大于8时,就终止循环:

for number in 1...10 {
    if number > 8 { break }
    print(number)
}
// 1 2 3 4 5 6 7 8

What's next?

以上,就是Swift中代码分支和循环最基本的用法。面对我们日常可能需要判断的各种复杂的情况,Swift从函数式编程中借鉴了很多匹配复杂条件的方法,力图帮助我们从拼接各种复杂的逻辑条中解放出来,进而让代码呈现更好的语义表现方式。在下一节中,我们就来了解下Swift中丰富的条件匹配方式。

所有订阅均支持 12 期免息分期

¥ 59

按月订阅

一个月,观看并下载所有视频内容。初来泊学,这可能是个最好的开始。

开始订阅

¥ 512

按年订阅

一年的时间,让我们一起疯狂地狩猎知识吧。比按月订阅优惠 28%

开始订阅

¥ 1280

泊学终身会员

永久观看和下载所有泊学网站视频,并赠送 100 元商店优惠券。

我要加入
如需帮助,欢迎通过以下方式联系我们