Fallthrough
首先看一下 C 中的 Switch, 如果在 case 命中的时候, 不使用 break, 会依次走下面的 case, 无论是否匹配, 直到遇到 break, 或者走完整个 switch, 下面代码和输出:
int a = 10;
switch (a) {
case 9:
printf("%d\n", 9);
break;
case 10:
printf("%d\n", a);
case 11:
printf("%d\n", 11);
case 12:
printf("%d\n", 12);
default:
printf("%s\n", "default");
}
printf("%s", "\n");
// print
10
11
12
default
Program ended with exit code: 0
Swift 的 Switch 与 C 的不同的地方在于, 无论是否使用 break, 在命中 case 的时候都会退出, 如果想继续执行 next case, 可以使用 fallthrough
, 使用 fallthrough
的效果就和 c case 无 break
一样, 但当 swift 的 next case 没有 fallthrough
, 会立刻结束, 如下代码和输出:
let integerToDescribe = 5
var description = "The number \(integerToDescribe) is"
switch integerToDescribe {
case 2, 3, 5, 7, 11, 13, 17, 19:
description += " a prime number, and also"
fallthrough
case 99 ... 100:
description += " 0 ... 100"
default:
description += " an integer."
}
print(description)
// print
The number 5 is a prime number, and also 0 ... 100
多个嵌套的控制
- 使用 continue 和 break 指定某个循环来操作, 如果后面没有具体的循环, 则操作当前的循环.
var a = 0
loop1: while a != 5 {
a += 1
print("1run")
loop2: while a != 5 {
if a != 5 {
continue loop1
}
print("2run")
}
print("11run")
}
print(a)
// print
1run
1run
1run
1run
1run
11run
5
- 如果循环中包含 switch , break在 switch 中不指定具体的循环, 就会 break case, switch 中的 continue 不受 switch 影响.
var a = 0
loop1: while a != 100 {
a += 1
switch a {
case 12:
break loop1
default:
break
}
}
print(a)
// print
12
网友评论