我們并不希望只能寫出逐行線性執(zhí)行的程序。因為代碼和人生一樣,總會出現(xiàn)岔路口,我們常常需要在岔路口上做出抉擇,左邊還是右邊?。對于人生的選擇,swift可沒提供什么幫助,但如果在程序當中做選擇,swift可以已經(jīng)為程序員們做好了準備。
1、if else分支選擇
在程序設計的過程中,我們常常需要讓一段代碼在一定的條件下才執(zhí)行。這時候我們就可以選擇使用if關鍵字。我們先看一下if else關鍵字的語法描述。

首先是if關鍵字,后面是一個條件表達式,如果條件表達式為真,則執(zhí)行第一段代碼,否則執(zhí)行第二段代碼。使用ifelse可以輕松實現(xiàn)一個二元的分支選擇。我們看一個簡單的例子,在兩個數(shù)中,選擇一個大的打印輸出。
var x = arc4random_uniform(100) // x為100以內的隨機數(shù)
var y = arc4random_uniform(100) // y為100以內的隨機數(shù)
if x > y {
print(x)
} else {
print(y)
}
其實我們通過if else的組合可以生成更復雜的,就像這樣的.
if x > y {
print(x)
} else if x == y {
print(x)
} else {
print(y)
}
這種冗長的表達方式并不是一種最好的選擇,我們可以使用switch關鍵字來實現(xiàn)多路分支分支,不但在會產(chǎn)生更易讀的代買結構,更重要的是switch可以提供更強勁的 模式匹配 能力。關于switch的模式匹配,可以看另外一篇內容 switch與模式匹配
2、switch case分支選擇
switch可以幫我們做兩個重要的工作,一個是描述所有的分支結構,另外一個是通過模式匹配,實現(xiàn)分支選擇,我們可以認為if是通過條件表達式來進行分支選擇的,而switch則是通過模式匹配進行分支選擇,當然這并不是說switch不可以使用條件表達式哦,可以看另外一篇內容switch與模式匹配來了解switch如何使用條件表達式。我們先看下一switch的語法表達式。

匹配對象按照順序依次與條件分支進行匹配,直到遇到一條可以匹配成功的分支后,執(zhí)行該分支對應的代碼。當代碼執(zhí)行完成以后,正常的流程就結束了。
let number = 3
switch number {
case 1:
print("Monday")
case 2:
print("Tuesday")
case 3:
print("Wednesday")
case 4:
print("Thursday")
case 5:
print("Friday")
case 6:
print("Saturday")
case 7:
print("Sunday")
default:
print("error")
}
這是一個非常簡單的例子,把一個整數(shù)轉化為星期的單詞描述。其中常量 number 就是匹配對象。依次與每個分支進行匹配,最后執(zhí)行print("Wednesday")后,switch語句結束。
swift默認為每個case語句添加了break,一但匹配成功并執(zhí)行完分支對應的代碼后,流程就會被break結束掉,如果我們希望無論是否匹配成功都要一次執(zhí)行每個分支的匹配,那么我們可以使用fallthrough關鍵字來實現(xiàn)。
let number = 3
switch number {
case 3:
print("Monday")
fallthrough
case 4:
print("Tuesday")
fallthrough
default:
print("error")
}
通過fallthrough,number會依次與每一個分支條件進行匹配,盡管第一個分支條件就已經(jīng)完成匹配了。