Swift中switch和switch在enum中和非enum中的區別
對於swift中的switch感覺到非常棒,它會比我之前用過的語言中的switch應用要廣得多,而且對於處理多值匹配簡直強到爆,對於座標的比較簡直是絕配。
在Swift中的switch語法比c,java等語言感覺簡便了很多,而且也能更加符合邏輯和對事物的嚴謹。
如下:
switch X1 {
case 1:
// 省略
case 2,3:
// 省略
default:
// 省略
}
首先在X1的部分,可以使用變數,常量或者字面值。
然後在case表示式之後的語句省略了通常需要的break,return等控制流關鍵字,感覺這是太人性化了,
為了讓條件控制可以在一個範圍中,swift的switch也支援了 case xxx, xxx:這樣的語法,這讓我們也能夠處理
條件在一定範圍中的情況,就像sql語句中的in,很重要的是default是必須要新增的,這樣讓我們寫程式的時候
能夠自動增加嚴謹性,
關於default的使用,在enum中有所不同,當我們在enum中使用switch語句時,可以不使用default關鍵字,前提
條件是已經包含了enum中所有物件,如下:
enum Rank {
case one, two, three
func test() {
switchself {
case .one:
let n =1
case .two:
let n =2
case .three:
let n =3
// 這裡沒有default也可以哦,因為enum中的所有值都已經在switch中存在,感覺這樣的設計非常的合理
}
}
}
至於在其他情況下switch的使用,目前還沒有測試到
---------------補充下-----------------
關於swift中的swtich的強大之處在於處理範圍匹配和tuple(我更願意把它們稱為多值匹配)
範圍匹配支援 ... 和 .. 語法,而不僅僅是 case xx, xxx這樣的方式,
而且在支援tuple匹配的時候,在每個tuple裡的單個值也可以支援範圍匹配。下面給出官方文件中的例子:
“let count = 3_000_000_000_000
let countedThings = "stars in the Milky Way"
var naturalCount: String
switch count {
case 0:
naturalCount = "no"
case 1...3:
naturalCount = "a few"
case 4...9:
naturalCount = "several"
case 10...99:
naturalCount = "tens of"
case 100...999:
naturalCount = "hundreds of"
case 1000...999_999:
naturalCount = "thousands of"
default:
naturalCount = "millions and millions of"
}”
--------------tuple----------
“let somePoint = (1, 1)
switch somePoint {
case (0, 0):
println("(0, 0) is at the origin")
case (_, 0):
println("(\(somePoint.0), 0) is on the x-axis")
case (0, _):
println("(0, \(somePoint.1)) is on the y-axis")
case (-2...2, -2...2):
println("(\(somePoint.0), \(somePoint.1)) is inside the box")
default:
println("(\(somePoint.0), \(somePoint.1)) is outside of the box")
}”