Swift中的switch...case語句可以判斷對象類型, Objective-C中則必須是整數。
不可以穿透,可以不寫break,
var rank = "A"switch rank{ case "A": //相當于if print("優") case "B": // 相當于else if print("優") case "C": // 相當于else if print("優") default: // 相當于else print("沒有評級")}
因為不能穿透所以不能這么寫
var rank1 = "A"switch rank1{ case "A": case "B": print("優") case "C": print("優") default: print("沒有評級")}
只能這么寫
var rank1 = "A"switch rank1{ case "A", "B": // 注意OC不能這樣寫 print("優") case "C": print("差") default: print("沒有評級")}
不能不寫default
var rank2 = "A"switch rank2{ case "A": print("優") case "B": print("良") case "C": print("差")}
default位置只能在最后
var rank3 = "A"switch rank3{ default: print("沒有評級") case "A": print("優") case "B": print("良") case "C": print("差")}
在case中定義變量不用加大括號
var rank4 = "A"switch rank4{ case "A": var num = 10 print("優") case "B": print("良") case "C": print("差") default: print("沒有評級")}
區間和元祖匹配
var num = 10;switch num{ case 1...9: print("個位數") case 10...99: print("十位數") default: print("其它數")}
var point = (10, 15)switch point{ case (0, 0): print("坐標在原點") case (1...10, 10...20): // 可以在元祖中再加上區間 print("坐標的X和Y在1~10之間") case (_, 0): // X可以是任意數 print("坐標的X在X軸上") default: print("Other")}
值綁定
var point = (1, 10)switch point{ case (var x, 10): // 會將point中X的值賦值給X print("x= /(x)") case (var x, var y): // 會將point中XY的值賦值給XY print("x= /(x) y= /(y)") case var( x, y): print("x= /(x) y= /(y)") default: print("Other")}
根據條件綁定
var point = (100, 10)switch point{ // 只有where后面的條件表達式為真才賦值并執行case后的語句 case var(x, y) where x > y: print("x= /(x) y= /(y)") default: print("Other")}
fallthrough關鍵字
Swift語言中的switch不會從上一個case分支落入到下一個case分支中。相反,只要第一個匹配到的case分支完成了它需要執行的語句,整個switch代碼塊完成了它的執行。相比之下,C語言要求你顯示的插入break語句到每個switch分支的末尾來阻止自動落入到下一個case分支中。Swift語言的這種避免默認落入到下一個分支中的特性意味著它的switch 功能要比C語言的更加清晰和可預測,可以避免無意識地執行多個case分支從而引發的錯誤。
如果你確實需要C風格的落入(fallthrough)的特性,你可以在每個需要該特性的case分支中使用fallthrough關鍵字。下面的例子使用fallthrough來創建一個數字的描述語句。
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."
這個例子定義了一個String類型的變量description并且給它設置了一個初始值。函數使用switch邏輯來判斷integerToDescribe變量的值。當integerToDescribe的值屬于列表中的質數之一時,該函數添加一段文字在description后,來表明這個是數字是一個質數。然后它使用fallthrough關鍵字來"落入"到default分支中。default分支添加一段額外的文字在description的最后,至此switch代碼塊執行完了。
如果integerToDescribe的值不屬于列表中的任何質數,那么它不會匹配到第一個switch分支。而這里沒有其他特別的分支情況,所以integerToDescribe匹配到包含所有的default分支中。
當switch代碼塊執行完后,使用println函數打印該數字的描述。在這個例子中,數字5被準確的識別為了一個質數。
NOTE:fallthrough關鍵字不會檢查它下一個將會落入執行的case中的匹配條件。fallthrough簡單地使代碼執行繼續連接到下一個case中的執行代碼,這和C語言標準中的switch語句特性是一樣的。