Swift編程中的switch...case語句實(shí)例解析
Swift中的switch...case語句可以判斷對象類型, Objective-C中則必須是整數(shù)。
不可以穿透,可以不寫break,
var rank = "A"
switch rank{
case "A": //相當(dāng)于if
print("優(yōu)")
case "B": // 相當(dāng)于else if
print("優(yōu)")
case "C": // 相當(dāng)于else if
print("優(yōu)")
default: // 相當(dāng)于else
print("沒有評級(jí)")
}
因?yàn)椴荒艽┩杆圆荒苓@么寫
var rank1 = "A"
switch rank1{
case "A":
case "B":
print("優(yōu)")
case "C":
print("優(yōu)")
default:
print("沒有評級(jí)")
}
只能這么寫
var rank1 = "A"
switch rank1{
case "A", "B": // 注意OC不能這樣寫
print("優(yōu)")
case "C":
print("差")
default:
print("沒有評級(jí)")
}
不能不寫default
var rank2 = "A"
switch rank2{
case "A":
print("優(yōu)")
case "B":
print("良")
case "C":
print("差")
}
default位置只能在最后
var rank3 = "A"
switch rank3{
default:
print("沒有評級(jí)")
case "A":
print("優(yōu)")
case "B":
print("良")
case "C":
print("差")
}
在case中定義變量不用加大括號(hào)
var rank4 = "A"
switch rank4{
case "A":
var num = 10
print("優(yōu)")
case "B":
print("良")
case "C":
print("差")
default:
print("沒有評級(jí)")
}
區(qū)間和元祖匹配
var num = 10;
switch num{
case 1...9:
print("個(gè)位數(shù)")
case 10...99:
print("十位數(shù)")
default:
print("其它數(shù)")
}
var point = (10, 15)
switch point{
case (0, 0):
print("坐標(biāo)在原點(diǎn)")
case (1...10, 10...20): // 可以在元祖中再加上區(qū)間
print("坐標(biāo)的X和Y在1~10之間")
case (_, 0): // X可以是任意數(shù)
print("坐標(biāo)的X在X軸上")
default:
print("Other")
}
值綁定
var point = (1, 10)
switch point{
case (var x, 10): // 會(huì)將point中X的值賦值給X
print("x= \(x)")
case (var x, var y): // 會(huì)將point中XY的值賦值給XY
print("x= \(x) y= \(y)")
case var( x, y):
print("x= \(x) y= \(y)")
default:
print("Other")
}
根據(jù)條件綁定
var point = (100, 10)
switch point{
// 只有where后面的條件表達(dá)式為真才賦值并執(zhí)行case后的語句
case var(x, y) where x > y:
print("x= \(x) y= \(y)")
default:
print("Other")
}
fallthrough關(guān)鍵字
Swift語言中的switch不會(huì)從上一個(gè)case分支落入到下一個(gè)case分支中。相反,只要第一個(gè)匹配到的case分支完成了它需要執(zhí)行的語句,整個(gè)switch代碼塊完成了它的執(zhí)行。相比之下,C語言要求你顯示的插入break語句到每個(gè)switch分支的末尾來阻止自動(dòng)落入到下一個(gè)case分支中。Swift語言的這種避免默認(rèn)落入到下一個(gè)分支中的特性意味著它的switch 功能要比C語言的更加清晰和可預(yù)測,可以避免無意識(shí)地執(zhí)行多個(gè)case分支從而引發(fā)的錯(cuò)誤。
如果你確實(shí)需要C風(fēng)格的落入(fallthrough)的特性,你可以在每個(gè)需要該特性的case分支中使用fallthrough關(guān)鍵字。下面的例子使用fallthrough來創(chuàng)建一個(gè)數(shù)字的描述語句。
let integerToDescribe = 5
var description = "The number \(integerToDescribe) is"
switch integerToDescribe {
case 2, 3, 5, 7, 11, 13, 17, 19:
description += " a prime number, and also"
fallthrough
default:
description += " an integer."
}
println(description)
// prints "The number 5 is a prime number, and also an integer."
這個(gè)例子定義了一個(gè)String類型的變量description并且給它設(shè)置了一個(gè)初始值。函數(shù)使用switch邏輯來判斷integerToDescribe變量的值。當(dāng)integerToDescribe的值屬于列表中的質(zhì)數(shù)之一時(shí),該函數(shù)添加一段文字在description后,來表明這個(gè)是數(shù)字是一個(gè)質(zhì)數(shù)。然后它使用fallthrough關(guān)鍵字來"落入"到default分支中。default分支添加一段額外的文字在description的最后,至此switch代碼塊執(zhí)行完了。
如果integerToDescribe的值不屬于列表中的任何質(zhì)數(shù),那么它不會(huì)匹配到第一個(gè)switch分支。而這里沒有其他特別的分支情況,所以integerToDescribe匹配到包含所有的default分支中。
當(dāng)switch代碼塊執(zhí)行完后,使用println函數(shù)打印該數(shù)字的描述。在這個(gè)例子中,數(shù)字5被準(zhǔn)確的識(shí)別為了一個(gè)質(zhì)數(shù)。
NOTE:fallthrough關(guān)鍵字不會(huì)檢查它下一個(gè)將會(huì)落入執(zhí)行的case中的匹配條件。fallthrough簡單地使代碼執(zhí)行繼續(xù)連接到下一個(gè)case中的執(zhí)行代碼,這和C語言標(biāo)準(zhǔn)中的switch語句特性是一樣的。
相關(guān)文章
swift實(shí)現(xiàn)顏色漸變以及轉(zhuǎn)換動(dòng)畫
這篇文章主要為大家詳細(xì)介紹了swift實(shí)現(xiàn)顏色漸變以及轉(zhuǎn)換動(dòng)畫,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-01-01
RxSwift學(xué)習(xí)之Observable的新建、訂閱及取消訂閱
這篇文章主要給大家介紹了關(guān)于RxSwift學(xué)習(xí)教程之Observable的相關(guān)資料,文中詳細(xì)的給大家介紹了關(guān)于新建Observable、訂閱Observable和取消訂閱并消除內(nèi)存泄漏等相關(guān)的內(nèi)容,需要的朋友可以參考借鑒,下面來一起看看吧。2017-09-09
Swift實(shí)現(xiàn)多個(gè)TableView側(cè)滑與切換效果
這篇文章主要為大家詳細(xì)介紹了Swift實(shí)現(xiàn)多個(gè)TableView側(cè)滑與切換效果,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-11-11
Swift實(shí)現(xiàn)簡單計(jì)算器項(xiàng)目
這篇文章主要為大家詳細(xì)介紹了Swift實(shí)現(xiàn)簡單計(jì)算器項(xiàng)目,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-01-01
在Swift程序中實(shí)現(xiàn)手勢識(shí)別的方法
這篇文章主要介紹了在Swift程序中實(shí)現(xiàn)手勢識(shí)別的方法,蘋果的Swift語言即將進(jìn)入2.0開源階段,人氣爆棚中:D 需要的朋友可以參考下2015-07-07

