在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
Labeled Statements (标签语句) 循环或者switch语句可以嵌套其他的循环或者switch,这样在Swift中可以创建复杂的流程控制结构.循环或者switch语句都可以通过break语句来永久的结束,因此,有时候需要显式的 表明在循环或者switch中你需要break的语句.同样的,如果你嵌套多个循环,显式的表明里面的continue语句也是类似的. 为了达成这个目标,可以在循环语句或者switch语句中使用一个语句标签(statement label),利用这个标签和break或continue语句来结束或者继续执行标签的语句. 一个标签语句的写法是在相同语句行使用label关键字后,再跟一个冒号(:),下面是一个while循环的例子,这个例子对于switch语句和其他所有循环都是相同的规则: label name: while condition { statements } 下面的例子通过在标记的while循环中使用break和continue语句来实现蛇和 梯@@子 游戏的改进版本,并且游戏添加了一个扩展的规则: 必须到达格子25才获胜. 如果你投掷色子超过了格子25,你必须重新再投掷直到你准确的到达格子25 游戏的格子与之前是一样的:
值finalSquare, board, square, 和diceRoll的初始化也与之前一样: let finalSquare = 25 var board = Int[](count: finalSquare + 1, repeatedValue: 0) 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 这个版本的游戏使用while循环和一个switch语句来完成游戏逻辑.while循环有一个标记语句gameLoop,是为了说明它是游戏的主要循环. while循环的条件是while square != finalSquare,这个表示你必须达到格子25: gameLoop: while square != finalSquare { 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] } } println("Game over!") 在每次循环的是时候都投掷色子,而不是立刻移动玩家.switch语句用来处理移动结果并计算移动:
注意点: 如果break语句没有使用gameLoop标记,它将只跳出switch语句,而不是while语句.使用gameLoop标记可以清晰的表明将要结束的控制语句. 同时,在调用continue gameLoop语句跳转到下一次循环,使用gameLoop标记并不是严格要求的.游戏中只有一个循环,因此不会continue语句不会有模棱两可的情况.但是使用了 gameLoop标记continue语句依然是无害的.这么做的原因是对比break语句,并且帮助游戏逻辑清晰,增加可读性和易于理解.
|
请发表评论