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"
}
}()
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"
}
}()