【发布时间】:2017-05-06 05:35:55
【问题描述】:
(当我准备好并且几乎写完问题时,重新阅读相应的语言指南部分为我回答了它,但可能问答对其他人有用,所以我还是会发布它)
背景
考虑以下enum,具有两种不同类型的关联值之一,Int 或String:
enum Foo {
case bar(Int)
case baz(Int)
case bax(Int)
case fox(String)
}
当在switch 语句中执行模式匹配时,我们可能会构建复合案例,每个案例都包含几种可能的匹配模式(如果任何模式匹配,则进入case 分支):
func foo(_ foo: Foo) -> Int {
switch foo {
case .bar, .baz, .bax: return 42
case .fox: return 0
}
}
就像非复合案例一样,复合案例也可能包括值绑定:
func foo(_ foo: Foo) -> Int {
switch foo {
case .bar(let x), .baz(let x), .bax(let x): return x
case .fox(let y): return Int(y) ?? 0
}
}
// or
func foo(_ foo: Foo) -> Int {
switch foo {
case let .bar(x), let .baz(x), let .bax(x): return x
case let .fox(y): return Int(y) ?? 0
}
}
问题
- 是否可以对复合案例使用单个公共值绑定,它涵盖具有相同类型关联值的多个
enum案例的复合?
例如,在上面的后一个值绑定示例中,以某种方式为复合 case 中的公共类型关联值使用单个绑定功能
// not valid
func foo(_ foo: Foo) -> Int {
switch foo {
case .bar, .baz, .bax, (let x): return x
case .fox: return 0
}
}
【问题讨论】:
标签: swift enums switch-statement