Swift中的前提切換語句switch...case進修教程。本站提示廣大學習愛好者:(Swift中的前提切換語句switch...case進修教程)文章只能為提供參考,不一定能成為您想要的結果。以下是Swift中的前提切換語句switch...case進修教程正文
語法
Swift 說話中 switch 語句的語法:
switch expression {
case expression1 :
statement(s)
fallthrough /* 可選 */
case expression2, expression3 :
statement(s)
fallthrough /* 可選 */
default : /* 可選 */
statement(s);
}
留意:在年夜多半說話中,switch 語句塊中,case 要緊跟 break,不然 case 以後的語句會次序運轉,而在 Swift 說話中,默許是不會履行下去的,switch 也會終止。假如你想在 Swift 中讓 case 以後的語句會按次序持續運轉,則須要應用 fallthrough 語句。
須要留意的處所有兩點:
Switch固然也支撐顯式的break,平日只要一種情形下你會這麼做,那就是當你也不想在default裡做任何工作的時刻,這個時刻你便可以在default裡顯式地加上一句break。
fallthrough其實不是在任何情形下都有用,當你在Switch裡應用Value Binding技巧的時刻,fallthrough就被制止了。Value Binding鄙人面會講到。
支撐多種數據類型
在Objective-C裡,Switch語句只能支撐整形的數據(或許一個字符),然則在Swift裡,Switch能支撐多種數據類型,包含浮點、布爾、字符串等:
支撐浮點:
let float = 1.5
switch float {
case 1.5:
"1.5" //被輸入
default:
"default"
}
支撐布爾:
let isSuccess = true
switch isSuccess {
case true:
"true" //被輸入
default:
"default"
}
支撐字符串:
let name = "Bannings"
switch name {
case "Bannings":
"Bannings" //被輸入
default:
"default"
}
可以說是史上支撐數據類型最多的Switch了。
支撐區間運算符
不只僅是輪回構造裡可以用區間運算符,在Switch裡異樣可以用區間運算符:
var i = 15
switch i {
case 0 ... 10:
"0~10"
case 11 ... 20:
"11~20" //被輸入
default:
"default"
}
對某個數值區間停止批量婚配,如許是否是很酷?浮點數也異樣支撐區間運算符。
支撐元組
作為被年夜年夜加強的Switch,元組也是被支撐的:
let request = (true,"success")
switch request {
case (true, "success"):
"success" //被輸入
case (false, "failed"):
"failed"
default:
"default"
}
應用元組和應用其他數據類型分歧,不外元組還有一項特色,關於不想關懷的值,可以用下劃線_跳過,如:
let (name, _, age) = ("Bannings" ,true, 22)
那末在應用Switch時,異樣支撐這項特征:
let request = (true,"success")
switch request {
case (_, "success"):
"success" //被輸入
case (false, _):
"failed"
default:
"default"
}
關於不關懷的值跳過,只需知足另外一個值就好了。須要留意一點的是,假如元組中的值也是數字類型,那末也是可以用區間運算符的:
let request = (10,"failed")
switch request {
case (_, "success"):
"success"
case (1 ... 10, _):
"1~10" //被輸入
default:
"default"
}
Value Binding
針對元組,Switch還支撐相似於Optional Binding的Value Binding,就是能把元組中的各個值提掏出來,然後直接鄙人面應用:
let request = (0,"success")
switch request {
case (0, let state):
state //被輸入:success
case (let errorCode, _):
"error code is \(errorCode)"
} // 涵蓋了一切能夠的case,不消寫default了
如許也是可以的:
let request = (0,"success")
switch request {
case let (errorCode, state):
state //被輸入:success
case (let errorCode, _):
"error code is \(errorCode)"
}
把let放在裡面和放在外面為每個元素零丁寫上let是等價的。
當你在一個case裡應用Value Binding的時刻,假如你同時也在它的上一個case裡應用了fallthrough,這是編譯器所不許可的,你能夠會收到如許一個編譯毛病:
只需把上面的errorCode去失落就好了,固然,斟酌好本身的邏輯。
支撐額定的邏輯斷定
在應用Switch語句時,Switch會恰當地導向響應的case部門,這其實就相當於做了一次邏輯斷定,但Swift的Switch語句還支撐額定的邏輯斷定:
let request = (0,"success")
switch request {
case (0, let state) where state != "success":
state
case (let errorCode, _):
"error code is \(errorCode)"//被輸入:"error code is 0"
}
這異樣很酷,信任在某種情形下會派上年夜用處。
總結
Swift對Switch停止了年夜年夜加強,使Switch的靈巧性獲得了很年夜晉升,這是沖動人心的轉變,然則假如掌控欠好個中的變更,能夠會使你在停止毛病排查時增長難度,也會使代碼龐雜度變高。在恰當地時刻靈巧應用,堅持腦筋清楚老是無益的。