1. 程式人生 > >Swift中switch和switch在enum中和非enum中的區別

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")
}”