有的时候,我们可能需要多次执行同一块代码。一般情况下,语句是按顺序执行的:函数中的第一个语句先执行,接着是第二个语句,依此类推。
循环是一个非常神奇的事情:有每秒重复一些简单任务数十亿次的能力。
至于循环些什么内容,就取决于你。你可能要添加一些数字,也可能需要读取一些传感器数据,或者可以每秒重绘屏幕120次。
循环语句允许我们多次执行一个语句或语句组。Swift 提供了可以循环执行任务的for-in和while循环,以及根据条件选择执行不同程式码分支的if和switch语句,还有控制流程跳转到其他程式码的break和continue语句。
For-in 循环
理解难度
★★★☆☆
实用程度
★★★☆☆
Swift提供了for-in循环和while循环,两者都是常用的。但是你应该使用哪种呢?
两种循环主要区别在于,for-in循环通常与有限序列一起使用:例如,我们循环浏览数字1到10,或循环数组中的项目。另一方面,while循环是为了循环到任何任意条件变成false为止。
使用for-in遍历一个集合内的所有元素,像是一个数字区间、数组、字典中的值或是字符串内的字元,例子如下:
// 一个一到三的闭区间
for index in 1...3 {
print(index)
}
// 会依序打印出:
// 1
// 2
// 3
上述程式内的index不用做声明的动作,在每次遍历开始时会被自动指派值,预设是一个常量。
index可以自行按需要标上更清楚易懂的名词。
for index in 1...5 {
print("\(index) 乘于 5 为:\(index * 5)")
}
另外如果只是要纯粹的循环,不需要用到区间内的每一个值,可以用下底线_来代替。
也就是你实际上不需要当前正在读取的“值”(也就是上面的 index)),只是要取当前循环的“次数”来做运算。这个时候就是用下底线的时候了,省的命名,反正用不到。
let base = 2
var total = 1
for _ in 1...3 {
total *= base
}
// 因为循环了三次 所以乘了三次 打印出:8
print(total)
使用for-in遍历一个数组(array)或是字典(dictionary)。
遍历字典时,会使用元组(tuple)来分别表示键与值,例子如下:
let arr = ["Apple", "Book", "Cat"]
for 打印arr in arr {
print(打印arr)
}
// 依序打印出:
// Apple
// Book
// Cat
let dict = ["Apple":12, "Book":3, "Cat":5]
for (key, values) in dict {
print("\(key) : \(values)")
}
// 打印出:(因为字典没有顺序 所以不一定是这样的顺序)
// Apple : 12
// Book : 3
// Cat : 5
While 循环
理解难度
★★★★☆
实用程度
★★☆☆☆
Swift 也提供两种while循环方式:while循环及repeat-while循环,两者都是循环地执行程式直到条件表达式返回false,差别在于,后者一开始在检查条件表达式之前,一定会先执行一次内部程式。
while循环方式意味着我们可以重复相同的代码,直到:
- 用户要求停止
- 服务器告诉我们停止
- 已经找到了需要的答案
- 已经生成了足够的数据
这就是while循环派上用场的地方:可以一直保持循环,直到我们准备好退出循环。
while 循环语法格式如下:
while 条件表达式 {
每次循环执行的程式
}
while 会循环的执行程式直到条件表达式返回false,例子如下:
var n = 2
while n < 20 {
n = n * 2
}
// 打印出:32
print(n)
上述例子的条件表达式为n < 20,每次都会将一开始指派为 2 的 n 乘以 2 ,持续循环直到 n 不再小于 20 ,最后一次 n 为 32 ,条件表达式会返回 false ,也就会打印出 32 ,结束这个 while 的循环。
var index = 10
while index < 20
{
print( "index 的值为 \(index)")
index = index + 1
}
退出循环
Swift的break关键字允许我们立即退出循环,无论我们说的是哪种循环都适用。大部分的情况可能不需要这个 break,因为你正在循环数组中的项目并想处理它们,或者因为你从1到10计数,并希望处理所有这些值。
然而,有时你确实想提早结束你的循环。例如,如果你有一系列分数,并且你想弄清楚玩家在没有得到0的情况下取得了多少分,你可以写以下内容:
let scores = [2, 4, 6, 3, 0, 5, 2]
var count = 0
for score in scores {
if score == 0 {
break
}
count += 1
}
print("你玩了 \(count) 次,才破了蛋")
想想看,玩家玩几次才得到分数呢?
Repeat-while循环
理解难度
★★★★☆
实用程度
★★☆☆☆
Swift repeat while 循环不像 for-in 和 while 循环在循环体开始执行前先判断条件语句,而是在循环执行结束时判断条件是否符合。
repeat-while 循环格式如下:
repeat {
每次循环执行的程式
} while 条件表达式
repeat-while 会先执行一次程式,再检查条件表达式,接着循环地执行程式直到条件表达式返回false。
var m = 512
repeat {
m = m * 2
} while m < 100
// 打印出:1024
print(m)
// 不论如何 都会先执行一次程式 所以 m 会先乘一次 2 为 1024
// 接着检查条件表达式 会返回 false 即结束这个循环
var index = 15
repeat{
print( "index 的值为 \(index)")
index = index + 1
}while index < 20
想想看,打印出来的结果是什么?
高效阅读-事半功倍读书法-重点笔记-不长,都是干货