根據(jù)特定的條件執(zhí)行特定的代碼通常是十分有用的,例如:當(dāng)錯(cuò)誤發(fā)生時(shí),你可能想運(yùn)行額外的代碼;或者,當(dāng)輸入的值太大或太小時(shí),向用戶顯示一條消息等。要實(shí)現(xiàn)這些功能,你就需要使用條件語(yǔ)句。
Swift 提供兩種類型的條件語(yǔ)句:if語(yǔ)句和switch語(yǔ)句。通常,當(dāng)條件較為簡(jiǎn)單且可能的情況很少時(shí),使用if語(yǔ)句。而switch語(yǔ)句更適用于條件較復(fù)雜、可能情況較多且需要用到模式匹配(pattern-matching)的情境。
if語(yǔ)句最簡(jiǎn)單的形式就是只包含一個(gè)條件,當(dāng)且僅當(dāng)該條件為true時(shí),才執(zhí)行相關(guān)代碼:
var temperatureInFahrenheit = 30
if temperatureInFahrenheit <= 32 {
println("It's very cold. Consider wearing a scarf.")
}
// 輸出 "It's very cold. Consider wearing a scarf."
上面的例子會(huì)判斷溫度是否小于等于 32 華氏度(水的冰點(diǎn))。如果是,則打印一條消息;否則,不打印任何消息,繼續(xù)執(zhí)行if塊后面的代碼。
當(dāng)然,if語(yǔ)句允許二選一,也就是當(dāng)條件為false時(shí),執(zhí)行 else 語(yǔ)句:
temperatureInFahrenheit = 40
if temperatureInFahrenheit <= 32 {
println("It's very cold. Consider wearing a scarf.")
} else {
println("It's not that cold. Wear a t-shirt.")
}
// 輸出 "It's not that cold. Wear a t-shirt."
顯然,這兩條分支中總有一條會(huì)被執(zhí)行。由于溫度已升至 40 華氏度,不算太冷,沒必要再圍圍巾——因此,else分支就被觸發(fā)了。
你可以把多個(gè)if語(yǔ)句鏈接在一起,像下面這樣:
temperatureInFahrenheit = 90
if temperatureInFahrenheit <= 32 {
println("It's very cold. Consider wearing a scarf.")
} else if temperatureInFahrenheit >= 86 {
println("It's really warm. Don't forget to wear sunscreen.")
} else {
println("It's not that cold. Wear a t-shirt.")
}
// 輸出 "It's really warm. Don't forget to wear sunscreen."
在上面的例子中,額外的if語(yǔ)句用于判斷是不是特別熱。而最后的else語(yǔ)句被保留了下來(lái),用于打印既不冷也不熱時(shí)的消息。
實(shí)際上,最后的else語(yǔ)句是可選的:
temperatureInFahrenheit = 72
if temperatureInFahrenheit <= 32 {
println("It's very cold. Consider wearing a scarf.")
} else if temperatureInFahrenheit >= 86 {
println("It's really warm. Don't forget to wear sunscreen.")
}
在這個(gè)例子中,由于既不冷也不熱,所以不會(huì)觸發(fā)if或else if分支,也就不會(huì)打印任何消息。
switch語(yǔ)句會(huì)嘗試把某個(gè)值與若干個(gè)模式(pattern)進(jìn)行匹配。根據(jù)第一個(gè)匹配成功的模式,switch語(yǔ)句會(huì)執(zhí)行對(duì)應(yīng)的代碼。當(dāng)有可能的情況較多時(shí),通常用switch語(yǔ)句替換if語(yǔ)句。
switch語(yǔ)句最簡(jiǎn)單的形式就是把某個(gè)值與一個(gè)或若干個(gè)相同類型的值作比較:
switch
some value to consider{
casevalue 1:
respond to value 1
casevalue 2,
value 3:
respond to value 2 or 3
default:
otherwise, do something else
}
switch語(yǔ)句都由多個(gè) case 構(gòu)成。為了匹配某些更特定的值,Swift 提供了幾種更復(fù)雜的匹配模式,這些模式將在本節(jié)的稍后部分提到。
每一個(gè) case 都是代碼執(zhí)行的一條分支,這與if語(yǔ)句類似。與之不同的是,switch語(yǔ)句會(huì)決定哪一條分支應(yīng)該被執(zhí)行。
switch語(yǔ)句必須是完備的。這就是說(shuō),每一個(gè)可能的值都必須至少有一個(gè) case 分支與之對(duì)應(yīng)。在某些不可能涵蓋所有值的情況下,你可以使用默認(rèn)(default)分支滿足該要求,這個(gè)默認(rèn)分支必須在switch語(yǔ)句的最后面。
下面的例子使用switch語(yǔ)句來(lái)匹配一個(gè)名為someCharacter的小寫字符:
上一篇:Swift特性下一篇:Swift閉包引起的循環(huán)強(qiáng)引用