在Swift中,可以在其他循环和条件语句中嵌套循环和条件语句,以创建复杂的控制流结构。 然而,循环和条件语句都可以使用break语句来提前结束它们的执行。 因此,有时需要明确关于哪个循环或条件语句希望break语句终止。 类似地,如果您有多个嵌套循环,那么可以显式地说明continue语句应该影响哪个循环。
要实现这些目标,您可以使用语句标签标记循环语句或条件语句。 使用条件语句,可以使用带有break语句的语句标签来结束带标签语句的执行。 使用循环语句,可以使用带有break或continue语句的语句标签来结束或继续执行带标签的语句。
标签语句通过将标签放置在与语句的介绍器关键字相同的行上,后跟冒号来指示。 下面是一个while循环语法的例子,所有循环和switch语句的原理是相同的
*label name*: while *condition* {
*statements*
}
let finalSquare = 25
var board = [Int](repeating: 0, count: finalSquare + 1)
board[03] = +08; board[06] = +11; board[09] = +09; board[10] = +02
board[14] = -10; board[19] = -11; board[22] = -02; board[24] = -08
var square = 0
var diceRoll = 0
gameLoop: while square != finalSquare {
diceRoll += 1
if diceRoll == 7 { diceRoll = 1 }
switch square + diceRoll {
case finalSquare:
// diceRoll will move us to the final square, so the game is over
break gameLoop
case let newSquare where newSquare > finalSquare:
// diceRoll will move us beyond the final square, so roll again
continue gameLoop
default:
// this is a valid move, so find out its effect
square += diceRoll
square += board[square]
}
}
print("Game over!")
如果上面的break语句没有使用gameLoop标签,它会断开switch语句,而不是while语句。 使用gameLoop标签可以清楚地知道应该终止哪个控制语句。
当调用continue gameLoop跳转到循环的下一次迭代时,不一定非要使用gameLoop标签。 游戏中只有一个循环,因此对于哪个循环continue语句会产生影响,没有歧义。 但是,使用带有continue语句的gameLoop标签没有任何危害。 这样做与标签在break语句旁边的使用一致,有助于使游戏的逻辑更清晰地阅读和理解。