Posted on 

控制流

三种结构:

  1. 顺序结构
  2. 循环结构
  3. 选择结构

循环结构

for…in

1
2
3
for i in -99...99{
i*i
}

循环变量实际上是可以被省略的。

很多时候我们并不需要知道当前循环进行到了第几次,此时,可以用_ 来代替 诸如 i 这样的循环变量。

1
2
3
4
5
6
var result = 1
var base = 2
var power = 10
for _ in 1...power {
result *= base
}

for

for循环拥有更强的灵活性。

1
2
3
4
for initialization ; condition ; increments {
// 循环初始条件 ; 循环结束条件 ; 循环变量变化方法
statements
}

例:

1
2
3
for var i = -99 ; i <= 99 ; i++ {
i * i
}

while

while与for循环等价。

while更适合循环次数不确定的场景。

1
2
3
4
5
initialization
while condition {
statements
increments
}

例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
var aWin = 0
var bWin = 0
var game = 0
while aWin < 3 && bWin < 3 {
game ++
let a = arc4random_uniform(6)+1
let b = arc4random_uniform(6)+1

print("a is \(a) , b is \(b) . ", terminator:"") // 不换行

if a > b {
print("A win!")
bWin = 0
aWin ++
}
else if a < b {
print("B win!")
aWin = 0
bWin ++
}
else {
print("draw")
aWin = 0
bWin = 0
}
}

repeat-while

至少执行一次的循环。

1
2
3
4
5
initialization
repeat {
statements
increments
} while condition

重写前面的小游戏:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
var aWin = false
var bWin = false
repeat {
let a = arc4random_uniform(6)+1
let b = arc4random_uniform(6)+1
print("a is \(a) , b is \(b). " , terminator: "")

if a > b {
aWin = true
}
else if a < b {
bWin = true
}
else {
print("draw", terminator:"")
}
}while !aWin && !bWin