控制流程
本節(jié)包含內(nèi)容:
- For循環(huán)
- While循環(huán)
- 條件語句
- 控制轉(zhuǎn)移語句
For循環(huán)
for循環(huán)用來按照指定的次數(shù)多次執(zhí)行一系列語句。Swift 提供兩種for循環(huán)形式:
- for-in用來遍歷一個區(qū)間(range),序列(sequence),集合(collection),系列(progression)里面所有的元素執(zhí)行一系列語句。
- for條件遞增(for-condition-increment)語句,用來重復(fù)執(zhí)行一系列語句直到達(dá)成特定條件達(dá)成,一般通過在每次循環(huán)完成后增加計數(shù)器的值來實現(xiàn)。
While循環(huán)
While
while循環(huán)從計算單一條件開始。如果條件為true,會重復(fù)運行一系列語句,直到條件變?yōu)閒alse。
下面是一般情況下 while 循環(huán)格式:
while condition { statements }
Do-While
while循環(huán)的另外一種形式是do-while,它和while的區(qū)別是在判斷循環(huán)條件之前,先執(zhí)行一次循環(huán)的代碼塊,然后重復(fù)循環(huán)直到條件為false。
下面是一般情況下 do-while循環(huán)的格式:
do { statements } while condition
條件語句
Swift 提供兩種類型的條件語句:if語句和switch語句。通常,當(dāng)條件較為簡單且可能的情況很少時,使用if語句。而switch語句更適用于條件較復(fù)雜、可能情況較多且需要用到模式匹配(pattern-matching)的情境。
Switch
switch語句會嘗試把某個值與若干個模式(pattern)進(jìn)行匹配。根據(jù)第一個匹配成功的模式,switch語句會執(zhí)行對應(yīng)的代碼。當(dāng)有可能的情況較多時,通常用switch語句替換if語句。
與 C 語言和 Objective-C 中的switch語句不同,在 Swift 中,當(dāng)匹配的 case 分支中的代碼執(zhí)行完畢后,程序會終止switch語句,而不會繼續(xù)執(zhí)行下一個 case 分支。這也就是說,不需要在 case 分支中顯式地使用break語句。這使得switch語句更安全、更易用,也避免了因忘記寫break語句而產(chǎn)生的錯誤。
case 分支的模式也可以是一個值的區(qū)間。
可以使用元組在同一個switch語句中測試多個值。元組中的元素可以是值,也可以是區(qū)間。另外,使用下劃線(_)來匹配所有可能的值。
case 分支的模式可以使用where語句來判斷額外的條件。
控制轉(zhuǎn)移語句
控制轉(zhuǎn)移語句改變你代碼的執(zhí)行順序,通過它你可以實現(xiàn)代碼的跳轉(zhuǎn)。Swift有四種控制轉(zhuǎn)移語句。
- continue
- break
- fallthrough
- return
Continue
continue語句告訴一個循環(huán)體立刻停止本次循環(huán)迭代,重新開始下次循環(huán)迭代。就好像在說“本次循環(huán)迭代我已經(jīng)執(zhí)行完了”,但是并不會離開整個循環(huán)體。
Break
break語句會立刻結(jié)束整個控制流的執(zhí)行。當(dāng)你想要更早的結(jié)束一個switch代碼塊或者一個循環(huán)體時,你都可以使用break語句。
貫穿(Fallthrough)
Swift 中的switch不會從上一個 case 分支落入到下一個 case 分支中。相反,只要第一個匹配到的 case 分支完成了它需要執(zhí)行的語句,整個switch代碼塊完成了它的執(zhí)行。相比之下,C 語言要求你顯示的插入break語句到每個switch分支的末尾來阻止自動落入到下一個 case 分支中。Swift 的這種避免默認(rèn)落入到下一個分支中的特性意味著它的switch 功能要比 C 語言的更加清晰和可預(yù)測,可以避免無意識地執(zhí)行多個 case 分支從而引發(fā)的錯誤。