4

Swift是一種非常功能的語言,函數式語言都是關於表達式而不是語句,這就是爲什麼開關模式匹配困擾我的原因。在swift中作爲函數表達式的模式匹配

所有的例子都是這樣的:

switch x { 
case > 0: 
    print("positive") 
case < 0: 
    print("negative") 
case 0: 
    print("zero") 
} 

但我想要做這樣的事情:

let result = switch x { 
case > 0: 
    "positive" 
case < 0: 
    "negative" 
case 0: 
    "zero" 
} 

目前我能看到這樣做的唯一途徑是:

var result: String? 

switch x { 
case > 0: 
    result = "positive" 
case < 0: 
    result = "negative" 
case 0: 
    result = "zero" 
} 

if let s = result { 
    //... 
} 

這顯然沒有像'基於表達式'的switch語句那樣優雅。是否有任何解決辦法或替代方案,或蘋果公司需要做些什麼來增強語言?

+0

類似的問題在這裏:http://stackoverflow.com/questions/27315698/assign-conditional-expression-in-swift。 –

+3

請注意,在上例中,您不需要可選項,您可以聲明'let result:String'。在使用變量之前,編譯器驗證一個值賦給它*。 –

+0

感謝馬丁我不知道 –

回答

6

Switch語句不能直接用作Swift中的表達式。但是,有一個解決方法可以做你想做的事。它可以編寫一個封閉的內部switch語句是這樣的:

let result : String = { 
    switch x { 
    case _ where x > 0: 
     return "positive" 
    case _ where x < 0: 
     return "negative" 
    default: 
     return "zero" 
    } 
}() 
+0

這是正確的答案,只是更新它使用'where'來檢查正面和負面的價值 –

+0

@EnekoAlonso感謝您的編輯! – aksh1t

+0

非常感謝你,這很漂亮 –