while循環(huán)運(yùn)行一系列語(yǔ)句直到條件變成false。這類循環(huán)適合使用在第一次迭代前迭代次數(shù)未知的情況下。Swift 提供兩種while循環(huán)形式:
while循環(huán),每次在循環(huán)開始時(shí)計(jì)算條件是否符合;do-while循環(huán),每次在循環(huán)結(jié)束時(shí)計(jì)算條件是否符合。
while循環(huán)從計(jì)算單一條件開始。如果條件為true,會(huì)重復(fù)運(yùn)行一系列語(yǔ)句,直到條件變?yōu)?code style="box-sizing: border-box; -webkit-tap-highlight-color: transparent; -webkit-font-smoothing: antialiased; font-family: Monaco, Menlo, Consolas, 'Courier New', monospace; font-size: 13px; padding: 0px 5px; color: rgb(199, 37, 78); background-color: rgb(248, 248, 248); white-space: nowrap; border-top-left-radius: 3px; border-top-right-radius: 3px; border-bottom-right-radius: 3px; border-bottom-left-radius: 3px; margin: 0px 2px; border: 1px solid rgb(234, 234, 234);">false。
下面是一般情況下 while 循環(huán)格式:
while
condition{
statements
}
下面的例子來(lái)玩一個(gè)叫做蛇和梯子(Snakes and Ladders)的小游戲,也叫做滑道和梯子(Chutes and Ladders):

游戲的規(guī)則如下:
游戲盤面可以使用一個(gè)Int數(shù)組來(lái)表達(dá)。數(shù)組的長(zhǎng)度由一個(gè)finalSquare常量?jī)?chǔ)存,用來(lái)初始化數(shù)組和檢測(cè)最終勝利條件。游戲盤面由 26 個(gè) Int 0 值初始化,而不是 25 個(gè)(由0到25,一共 26 個(gè)):
let finalSquare = 25
var board = Int[](count: finalSquare + 1, repeatedValue: 0)
一些方塊被設(shè)置成有蛇或者梯子的指定值。梯子底部的方塊是一個(gè)正值,使你可以向上移動(dòng),蛇頭處的方塊是一個(gè)負(fù)值,會(huì)讓你向下移動(dòng):
board[03] = +08; board[06] = +11; board[09] = +09; board[10] = +02
board[14] = -10; board[19] = -11; board[22] = -02; board[24] = -08
3 號(hào)方塊是梯子的底部,會(huì)讓你向上移動(dòng)到 11 號(hào)方格,我們使用board[03]等于+08(來(lái)表示11和3之間的差值)。使用一元加運(yùn)算符(+i)是為了和一元減運(yùn)算符(-i)對(duì)稱,為了讓盤面代碼整齊,小于 10 的數(shù)字都使用 0 補(bǔ)齊(這些風(fēng)格上的調(diào)整都不是必須的,只是為了讓代碼看起來(lái)更加整潔)。
玩家由左下角編號(hào)為 0 的方格開始游戲。一般來(lái)說(shuō)玩家第一次擲骰子后才會(huì)進(jìn)入游戲盤面:
var square = 0
var diceRoll = 0
while square < finalSquare {
// 擲骰子
if ++diceRoll == 7 { diceRoll = 1 }
// 根據(jù)點(diǎn)數(shù)移動(dòng)
square += diceRoll
if square < board.count {
// 如果玩家還在棋盤上,順著梯子爬上去或者順著蛇滑下去
square += board[square]
}
}
println("Game over!")
本例中使用了最簡(jiǎn)單的方法來(lái)模擬擲骰子。 diceRoll的值并不是一個(gè)隨機(jī)數(shù),而是以0為初始值,之后每一次while循環(huán),diceRoll的值使用前置自增操作符(++i)來(lái)自增 1 ,然后檢測(cè)是否超出了最大值。++diceRoll調(diào)用完成后,返回值等于diceRoll自增后的值。任何時(shí)候如果diceRoll的值等于7時(shí),就超過(guò)了骰子的最大值,會(huì)被重置為1。所以diceRoll的取值順序會(huì)一直是1,2,3,4,5,6,1,2。
擲完骰子后,玩家向前移動(dòng)diceRoll個(gè)方格,如果玩家移動(dòng)超過(guò)了第 25 個(gè)方格,這個(gè)時(shí)候游戲結(jié)束,相應(yīng)地,代碼會(huì)在上一篇:Swift嵌套類型下一篇:Swift比較字符串