swift 中作为函数表达式的模式匹配

Pattern matching as a functional expression in 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 {
    //...
}

这显然不如基于 'expression' 的 switch 语句优雅。是否有任何解决方法或替代方案,或者这是苹果需要做的事情来增强语言?

Switch 语句不能直接用作Swift 中的表达式。但是,有一种解决方法可以做你想做的事。可以像这样在闭包中编写 switch 语句:

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