控制流程
本節(jié)包含內(nèi)容:
- For循環(huán)
- While循環(huán)
- 條件語(yǔ)句
- 控制轉(zhuǎn)移語(yǔ)句
For循環(huán)
for循環(huán)用來(lái)按照指定的次數(shù)多次執(zhí)行一系列語(yǔ)句镰矿。Swift 提供兩種for循環(huán)形式:
- for-in用來(lái)遍歷一個(gè)區(qū)間(range)时鸵,序列(sequence),集合(collection)鹅士,系列(progression)里面所有的元素執(zhí)行一系列語(yǔ)句。
- for條件遞增(for-condition-increment)語(yǔ)句,用來(lái)重復(fù)執(zhí)行一系列語(yǔ)句直到達(dá)成特定條件達(dá)成檬果,一般通過(guò)在每次循環(huán)完成后增加計(jì)數(shù)器的值來(lái)實(shí)現(xiàn)鞭莽。
While循環(huán)
While
while循環(huán)從計(jì)算單一條件開(kāi)始坊秸。如果條件為true,會(huì)重復(fù)運(yùn)行一系列語(yǔ)句澎怒,直到條件變?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
條件語(yǔ)句
Swift 提供兩種類(lèi)型的條件語(yǔ)句:if語(yǔ)句和switch語(yǔ)句惧辈。通常琳状,當(dāng)條件較為簡(jiǎn)單且可能的情況很少時(shí),使用if語(yǔ)句盒齿。而switch語(yǔ)句更適用于條件較復(fù)雜念逞、可能情況較多且需要用到模式匹配(pattern-matching)的情境。
Switch
switch語(yǔ)句會(huì)嘗試把某個(gè)值與若干個(gè)模式(pattern)進(jìn)行匹配边翁。根據(jù)第一個(gè)匹配成功的模式翎承,switch語(yǔ)句會(huì)執(zhí)行對(duì)應(yīng)的代碼。當(dāng)有可能的情況較多時(shí)符匾,通常用switch語(yǔ)句替換if語(yǔ)句叨咖。
與 C 語(yǔ)言和 Objective-C 中的switch語(yǔ)句不同,在 Swift 中,當(dāng)匹配的 case 分支中的代碼執(zhí)行完畢后甸各,程序會(huì)終止switch語(yǔ)句垛贤,而不會(huì)繼續(xù)執(zhí)行下一個(gè) case 分支。這也就是說(shuō)趣倾,不需要在 case 分支中顯式地使用break語(yǔ)句聘惦。這使得switch語(yǔ)句更安全、更易用誊酌,也避免了因忘記寫(xiě)break語(yǔ)句而產(chǎn)生的錯(cuò)誤部凑。
case 分支的模式也可以是一個(gè)值的區(qū)間。
可以使用元組在同一個(gè)switch語(yǔ)句中測(cè)試多個(gè)值碧浊。元組中的元素可以是值涂邀,也可以是區(qū)間。另外箱锐,使用下劃線(xiàn)(_)來(lái)匹配所有可能的值比勉。
case 分支的模式可以使用where語(yǔ)句來(lái)判斷額外的條件。
控制轉(zhuǎn)移語(yǔ)句
控制轉(zhuǎn)移語(yǔ)句改變你代碼的執(zhí)行順序驹止,通過(guò)它你可以實(shí)現(xiàn)代碼的跳轉(zhuǎn)浩聋。Swift有四種控制轉(zhuǎn)移語(yǔ)句。
- continue
- break
- fallthrough
- return
Continue
continue語(yǔ)句告訴一個(gè)循環(huán)體立刻停止本次循環(huán)迭代臊恋,重新開(kāi)始下次循環(huán)迭代衣洁。就好像在說(shuō)“本次循環(huán)迭代我已經(jīng)執(zhí)行完了”,但是并不會(huì)離開(kāi)整個(gè)循環(huán)體抖仅。
Break
break語(yǔ)句會(huì)立刻結(jié)束整個(gè)控制流的執(zhí)行坊夫。當(dāng)你想要更早的結(jié)束一個(gè)switch代碼塊或者一個(gè)循環(huán)體時(shí),你都可以使用break語(yǔ)句撤卢。
貫穿(Fallthrough)
Swift 中的switch不會(huì)從上一個(gè) case 分支落入到下一個(gè) case 分支中环凿。相反,只要第一個(gè)匹配到的 case 分支完成了它需要執(zhí)行的語(yǔ)句放吩,整個(gè)switch代碼塊完成了它的執(zhí)行智听。相比之下,C 語(yǔ)言要求你顯示的插入break語(yǔ)句到每個(gè)switch分支的末尾來(lái)阻止自動(dòng)落入到下一個(gè) case 分支中渡紫。Swift 的這種避免默認(rèn)落入到下一個(gè)分支中的特性意味著它的switch 功能要比 C 語(yǔ)言的更加清晰和可預(yù)測(cè)到推,可以避免無(wú)意識(shí)地執(zhí)行多個(gè) case 分支從而引發(fā)的錯(cuò)誤。