极速 Swift 教程之四 | 循环

欢迎关注微信公众号「Swift 花园」

For 循环

Swift 有很多种书写循环的方式,它们底层的机制是相同的:重复执行某段代码直到某个条件不再满足。

最常见的循环是 for 循环:它在数组和范围上循环,每次拉出一个值然后把它赋予一个常量。

举个例子,这里是一个数字的范围:

1
let count = 1...10

我们可以用一个 for 循环打印里面的每一个值,就像这样:

1
2
3
for number in count {
print(" 数字是 \(number)")
}

数组的操作方式也一样:

1
2
3
4
let albums = ["Red", "1989", "Reputation"]
for album in albums {
print("\(album) 在 Apple Music 上有售卖。")
}

如果你不需要用到 for 循环提供给你的常量,你可以用下划线替代,这样 Swift 就会忽略这个你没有用到的值:

1
2
3
for _ in 1...5 {
print("Zzz...")
}

While 循环

第二种书写循环的方式是使用 while :给定一个检查的条件,循环运行代码直到条件不成立。

举个例子,我们可以使用 while 循环来模拟一个躲猫猫游戏:从 1 开始数数,数到的数会打印出来。数完 20 个数之后打印 “准备好了没?我来啦!”

Swift 代码长这样:

1
2
3
4
5
6
7
var number = 1
while number <= 20 {
print(number)
number += 1
}

print(" 准备好了没?我来啦!")

Repeat 循环

第三种循环的写法不常用,它是 repeat 循环。除了把条件检查放在后面,它基本上跟 while 循环是一样的。

因此,我们可以用 repeat 循环重写我们的躲猫猫游戏:

1
2
3
4
5
6
7
var number = 1
repeat {
print(number)
number += 1
} while number <= 20

print(" 准备好了没?我来啦!")

因为检查的条件是放在后面,所以 repeat 循环里的代码至少会被执行一次。而 while 循环则是在首次运行前就会检查条件。

举个例子, 下面代码里的 print () 函数永远都不会被运行,因为 false 永远是 false :

1
2
3
while false {
print(" 这是 false")
}

Xcode 会警告我们上面代码中的 print () 代码永远都不会被执行。

而在下面这个代码里, print () 函数则至少运行一次,因为 repeat 只有在条件检查没有通过时才会停止执行:

1
2
3
repeat {
print(" 这是 false")
} while false

退出循环

你可以使用 break 关键字来终止循环。让我们以一个常规的 while 循环为例 —— 火箭发射倒计时:

1
2
3
4
5
6
7
var countDown = 10
while countDown >= 0 {
print(countDown)
countDown -= 1
}

print(" 发射!")

想象一下,宇航员感觉这个倒计时过程很无聊,决定跳过后面的数,直接发射:

1
2
3
4
5
6
7
8
9
while countDown >= 0 {
print(countDown)
if countDown == 4 {
print(" 好无聊啊,让我们直接发射吧!")
break
}

countDown -= 1
}

通过这次改动,只要 countDown 达到 4 ,那么宇航员的消息就会被打印,剩余的计数将会被忽略。


退出多重循环

把循环放在另一个循环里,叫做 嵌套 循环。有的时候,你会有这种需求:同时跳出内部的循环和外部的循环。

举个例子, 我们可以用嵌套循环实现一个从 1 到 10 的乘法表:

1
2
3
4
5
6
for i in 1...10 {
for j in 1...10 {
let product = i * j
print ("\(i) * \(j) 等于 \(product)")
}
}

如果想退出循环,我们需要做两件事。首先,给外层循环加一个标签,像这样:

1
2
3
4
5
6
outerLoop: for i in 1...10 {
for j in 1...10 {
let product = i * j
print ("\(i) * \(j) 等于 \(product)")
}
}

然后,在内层循环里添加条件,在条件满足时用 break outerLoop 同时退出内外层循环:

1
2
3
4
5
6
7
8
9
10
outerLoop: for i in 1...10 {
for j in 1...10 {
let product = i * j
print ("\(i) * \(j) 等于 \(product)")
if product == 50 {
print(" 这是一个靶心。")
break outerLoop
}
}
}

如果只使用 break ,就只能退出内层循环,外层循环会继续运行。


跳过循环项

如你所见, break 关键字可以用于退出循环。 但是假如你想要跳过当前项然后继续执行下一次循环,你可以使用 continue 关键字。

让我们写一个从 1 到 10 的循环,然后利用 Swift 的取余操作符来跳过所有的奇数:

1
2
3
4
5
6
7
for i in 1...10 {
if i % 2 == 1 {
continue
}

print(i)
}

无限循环

通常来说,我们用 while 循环来实现无限循环:它指的是那种不会自动停止的循环,或者说只有我们想要它停止时才停止的循环。你的智能手机里的 App 都用到了无限循环,因为它们一旦开始运行,就会持续运行,不断地接收输入事件,做出响应。

最简单的无限循环是用 true 作为条件。 true 使得循环可以无限重复地执行。 警告: 如果你采用 while true 来实现循环,确保你在循环内会有一个条件检查以退出这个无限循环。

举个例子, 我们用 while true 来模拟约翰・凯奇的《4’33”》这首歌。这首歌真的很奇葩,因为整个首歌的 4 分 33 秒都是沉默,没声。

1
2
3
4
5
6
7
8
var counter = 0
while true {
print(" ")
counter += 1
if counter == 273 {
break
}
}

总结

让我们来总结一下。

  1. 循环可以重复执行某段代码,直到条件不再满足。
  2. 最常见的循环是 for 循环,它内部会计数一个临时的常量来记录循环的次数。
  3. 如果你用不上这个 for 循环给到你的常量,可以使用下划线来告知 Swift 忽略它。
  4. 对于 while 循环,你需要显式地提供一个条件检查来决定循环是否执行。
  5. 尽管和 while 循环很像, repeat 循环至少会执行一次循环体里的代码。
  6. 你可以用 break 结束循环,但是在嵌套循环里, break 之后还要再加上标签才能跳出特定的外层循环。
  7. 你可以用 continue 来跳过循环中特定的项。
  8. 无限循环只有在你要求它停止时才会结束。如果你用了 while true 来实现无限循环,确保你有一个条件检查用于终止循环!

Linkedin
Plus
Share
Class
Send
Send
Pin