首页 > 代码库 > Welcome to Swift (苹果官方Swift文档初译与注解二十六)---181~188页(第四章-- 流程控制)

Welcome to Swift (苹果官方Swift文档初译与注解二十六)---181~188页(第四章-- 流程控制)

Do-While 

  while循环的另一个版本是do-while循环,它在判断条件之前,先执行一遍循环体,然后再次执行循环体,直到条件成为false.

  do-while循环的通过格式:

    do {

        statements

    } while condition

  我们再用蛇和梯子的例子,使用do-while循环代替while循环.其中 finalSquare, board, square, 和 diceRoll 的初始化与while循环是一样的:

    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

  游戏的这个版本中,循环的第一步是检查梯子或蛇,方格中没有梯子就会将玩家直接带到25格子,这样玩家不可能通过爬梯子来获胜.出于安全,要在循环的最开始检查蛇或梯子.

  游戏开始的时候,玩家总是在方格0.board[0] 总是等于0,这没有什么影响:

    do {

        // move up or down for a snake or ladder

        square += board[square]

        // roll the dice

        if ++diceRoll == 7 { diceRoll = 1 }

        // move by the rolled amount

        square += diceRoll

    } while square < finalSquare

    println("Game over!")

  在检查完蛇和梯子之后,开始投掷色子,然后玩家根据投掷的色子移动相应的格子,本次循环完成.

  循环条件(while square < finalSquare)与之前的是一样的,但这次是在第一次循环完成之后才计算条件.do-while循环比while更适合这个游戏例子.在上面的do-while循环里,square    += board[square]总是在条件确认之后就立刻执行,这样就去除了检查数组边界检查.

Conditional Statements (条件语句)

  代码中经常要根据某种条件来执行不同片段的代码.当错误发生的时候,你可能想运行扩展一段代码,或者当一个值太大或者太小的时候,你想像是一个信息,出于这样的情况,你需要处  理条件代码.

  Swift提供了两种方式来在代码中增加条件分支,它们是if语句和switch语句.通常的,使用if语句来计算简单的条件以供少量的几个可能情况.switch语句比较适合复杂的条件和更多的可  能分支,它的匹配模式在这些情况下能够是代码更加准确的根据分支执行.

If

  最简单的例子,if语句只有一个if条件.它只中条件是true的时候才会执行一组语句:

    var temperatureInFahrenheit = 30

    if temperatureInFahrenheit <= 32 {

        println("It‘s very cold. Consider wearing a scarf.")

    }

    // prints "It‘s very cold. Consider wearing a scarf.

  这个例子检查天气温度是否小于或者等于32度(华氏温度,32是水的冰点温度),如果是,将会输出一个消息,否则,没有消息输出,代码将继续执行if语句{}之后的部分.

  if语句提供了选择,这被称为else分句,当if条件是false的时候,else的语句被执行:

    temperatureInFahrenheit = 40

    if temperatureInFahrenheit <= 32 {

        println("It‘s very cold. Consider wearing a scarf.")

    } else {

        println("It‘s not that cold. Wear a t-shirt.")

    }

    // prints "It‘s not that cold. Wear a t-shirt.

  上面两个分支总会有一个被执行.因为温度增加到40华氏度,它不再那么冷得要穿一个披肩,因此,else分支被触发.

  可以多个if语句相互链接在一起来处理额外的分支:

    temperatureInFahrenheit = 90

    if temperatureInFahrenheit <= 32 {

        println("It‘s very cold. Consider wearing a scarf.")

    } else if temperatureInFahrenheit >= 86 {

        println("It‘s really warm. Don‘t forget to wear sunscreen.")

    } else {

        println("It‘s not that cold. Wear a t-shirt.")

    }

    // prints "It‘s really warm. Don‘t forget to wear sunscreen.”

  这里,添加了一个if语句来响应指定的一个温暖温度.最后的else语句保留下来,用来相应当温度既不特别温暖也不特别寒冷的情况.

  最后的else是可选的:

    temperatureInFahrenheit = 72

    if temperatureInFahrenheit <= 32 {

        println("It‘s very cold. Consider wearing a scarf.")

    } else if temperatureInFahrenheit >= 86 {

        println("It‘s really warm. Don‘t forget to wear sunscreen.")

    }

  这个例子里,温度既不太冷也不太温暖,不会触发if或者else if条件,因此没有信息输出.