Conditional Statements
我們會很常去判斷程式裡的一些條件是否成立,例如錯誤是否發生,或是因為數值高低而產生一些提醒訊息。Swift提供了兩種用在條件判斷的語法:if以及switch。
If
我們可以直接來看例子:
var tempeatureInFahrenheit = 30
if tempeatureInFahrenheit <= 32 {
print("It's very code")
}
// 上面的判定是以華氏32度為基準,若低於32度則顯示現在很冷。
反過來說,高於32度則是另一個判定成立,我們可以用else:
if tempeatureInFahrenheit <= 32 {
print("It's very code")
} else {
print("It's not so cold")
}
若我們需要在高於32度的情況再判斷很熱的情況,則我們可再加上另一則條件,用else if處理:
if tempeatureInFahrenheit <= 32 {
print("It's very hot")
} else if tempeatureInFahrenheit >= 86{
print("It's not so cold")
} else {
print("It's not so cold")
}
以上的程式讀起來就是:溫度若低於32度,表示現在很冷;若高於86度,則現在很熱;32~86之間的溫度則是剛剛好的。
<------32-----86------>
cold warm hot
Switch
Swift提供了滿強大的Switch供開發者使用,除了傳統的整數外,還可以判斷字元,字串,以及range跟tuples。
以下是switch的格式:
switch some value to consider {
case value 1:
respond to value1
case value 2:
respond to value2
case value 3:
respond to value3
default:
otherwise, do something else
}
Switch裡面可以判斷很多情況的條件,可以用case來增加。直接看以下例子:
let myCharacter: Character = "a"
switch myCharacter {
case "a", "e", "i", "o", "u":
print("\(myCharacter) is a vowel")
case "b", "c", "d", "f", "g", "h", "j", "k", "l", "m", "n", "p", "q", "r", "s", "t", "v", "w", "x", "y", "z":
print("\(myCharacter) is a consonant")
default:
print("\(myCharacter) is not a vowel or a consonant")
}
以上是判斷myCharacter是母音還是子音的情況。在多個條件的情況下,我們在用一個case用分號區隔,但是不能用case來分開,例如:
case "a", "e", "i", "o", "u":
print("\(myCharacter) is a vowel")
//正確寫法
case "a":
case "e":
case "i":
case "o":
case "u":
print("\(myCharacter) is a vowel")
// 編譯的時候就會錯誤,因為每個case 都要有相對應的statement。傳統的C可以這樣寫,但Swift不行。
Interval Matching
在Switch裡,case的值可以檢查包在裡面的區間:
let myScore = 85
var theResult: String
switch myScore {
case 0..<60:
theResult = "D"
case 60..<70:
theResult = "C"
case 70..<80:
theResult = "B"
case 80..<90:
theResult = "A"
case 90...100:
theResult = "A+"
default:
theResult = "C"
}
//以上的程式碼會判斷myScore落在case的區間為何,一開始的設定為85分,因此myResult的結果會是A
以下是結合tuples的例子:
let myPoint:(xAxis:Int yAxis:Int) = (1, 1)
switch myPoint {
case(0, 0):
print("origin")
case (_, 0)
print("on the x-axis")
case(0, _):
print("on the y-axis")
case(-2...2, -2...2):
print("in the box")
default:
print("not in the box")
}
//此例子為判斷坐標是否在-2<= x <= 2, -2<= y <= 2裡,並判斷特別的位置比如原點以及坐標軸上。
要注意的是,在Swift裡,case會以第一個判定到的為主。上面的例子,原點(0, 0)會符合所有的判斷,但因為我們把原點的判定寫在第一個,因此不會輸出其他的字串。
Switch跟tuples還有另一種應用可以結合:Value Bindings
在上面的例子裡,我們可以用 case(_, 0) 來判斷是否在x坐標上;而這種情況下我們可以綁定一個常數/變數讓我們能夠在特定的case裡使用x的值:
case(let x, 0):
雖然我們一樣可以直接使用myPoint.0或是myPoint.xAxis來取值,但這種情況下結合value binding可以讓程式碼更簡潔和易讀。
而value binding還可以再結合where做更進一步的判定,如:
case let (x, y) where x == y:
這行程式指的是,當我的x坐標跟y坐標相同時判定成功。