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条件,因此没有信息输出.