2014-06-04 86 views
107

快速通過說法嗎? e.g如果我做了以下快速通過案例

var testVar = "hello" 
var result = 0 

switch(testVal) 
{ 
case "one": 
    result = 1 
case "two": 
    result = 1 
default: 
    result = 3 
} 

是有可能有情況「一」和案件「兩節」執行相同的代碼?

回答

273

是的。你可以這樣做如下:

var testVal = "hello" 
var result = 0 

switch testVal { 
case "one", "two": 
    result = 1 
default: 
    result = 3 
} 

或者,您可以使用關鍵字fallthrough

var testVal = "hello" 
var result = 0 

switch testVal { 
case "one": 
    fallthrough 
case "two": 
    result = 1 
default: 
    result = 3 
} 
+35

+1提及'fallthrough'+1 – nhgrif

+15

+1不只是提及'fallthrough',而是建議使用多案例 – Thilo

+3

這是一個很好的妥協之間的C通過墜毀的危險,並沒有通過墜落例如,C# – Alexander

6
case "one", "two": 
    result = 1 

沒有break語句,但情況是很多更靈活。

附錄:由於模擬文件指出,在Swift中實際上有break語句。它們仍然可用於循環,但在switch語句中是不必要的,除非您需要填寫空白的情況,因爲空的情況是不允許的。例如:default: break

1

關鍵字fallthrough在案件結束時會導致您正在查找的潛在行爲,並且可以在單個案件中檢查多個值。

4
var testVar = "hello" 

switch(testVar) { 

case "hello": 

    println("hello match number 1") 

    fallthrough 

case "two": 

    println("two in not hello however the above fallthrough automatically always picks the  case following whether there is a match or not! To me this is wrong") 

default: 

    println("Default") 
} 
+0

你知道的一種方式下跌至默認情況下? – MarcJames

+1

我同意「案例二」。對我來說,這種行爲很糟糕。爲什麼Swift執行下一個案例,即使它不是真的?這使得switch語句完全無用...... –

0

這裏是例子你很容易理解:

let value = 0 

switch value 
{ 
case 0: 
    print(0) // print 0 
    fallthrough 
case 1: 
    print(1) // print 1 
case 2: 
    print(2) // Doesn't print 
default: 
    print("default") 
} 

結論:使用fallthrough執行下一個case(只有一個)時,前一個有fallthrough是匹配與否。