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

标签 swift functional-programming switch-statement pattern-matching expression

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 语句优雅。是否有任何解决方法或替代方案,或者这是苹果需要做的事情来增强语言?

最佳答案

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

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

关于swift - 模式匹配作为 swift 中的函数表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33240418/

相关文章:

ios - Firebase 控制台未在目标过滤器中显示我的应用版本

swift - 如何制作带有圆角的 window

java - 当我使用字符串进行切换时出现错误

c# - 将硬编码的 switch 语句转换为动态加载的多键一值查找

javascript - 如何将 case 语句放入 javascript 循环中

swift - 为属性设置相同的值是否仍然调用 willSet 和 didSet?

swift - 未定义的行为,或 : Does Swift have sequence points?

programming-languages - 寻找函数式语言

haskell - 如何修复这种嵌套 fmap 仿函数的困惑?

python3 : Using ternary operator in map, 它将返回 None