• Welcome to Swift (苹果官方Swift文档初译与注解三十)---219~224页(第四章-- 流程控制 完)


    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

      游戏的格子与之前是一样的:

    pastedGraphic.pdf

      值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语句跳转控制到while循环外的第一行代码,它结束游戏.
      •   如果投掷色子后,玩家移动超过最后的格子,移动不成立,玩家需要再次投掷,continue gameLoop语句结束当前while循环并且开始一次循环遍历.
      •   所有的其他情况,投掷色子移动,玩家向前移动diceRoll个格子,游戏逻辑上检查蛇和梯子,然后循环结束,控制返回到while条件判断,来决定是否进行一下个循环.

      注意点:

      如果break语句没有使用gameLoop标记,它将只跳出switch语句,而不是while语句.使用gameLoop标记可以清晰的表明将要结束的控制语句.

      同时,在调用continue gameLoop语句跳转到下一次循环,使用gameLoop标记并不是严格要求的.游戏中只有一个循环,因此不会continue语句不会有模棱两可的情况.但是使用了    gameLoop标记continue语句依然是无害的.这么做的原因是对比break语句,并且帮助游戏逻辑清晰,增加可读性和易于理解.

  • 相关阅读:
    运算
    使用mysql出现错误:com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Unknown column '??????' in 'field list'
    POI-HSSF and POI-XSSF
    java pio项目使用
    mysql安装及卸载
    pdf转word
    【android studio】android studio使用过程中,搜集的一些问题
    github提交失败并报错java.io.IOException: Authentication failed:
    收集的github的东西
    Material Design
  • 原文地址:https://www.cnblogs.com/caios/p/3836496.html
Copyright © 2020-2023  润新知