(当我准备并快要完成问题的撰写时,重新阅读了适当的语言指南部分,这回答了我的问题,但可能该问答对其他人有用,因此我仍然会发布它)
背景
考虑以下enum
,具有具有两种不同类型的关联值,即Int
或String
的情况:
enum Foo {
case bar(Int)
case baz(Int)
case bax(Int)
case fox(String)
}
在 switch
语句中进行模式匹配时,我们可以构建复合 case,每个 case 覆盖多个可能的匹配模式(如果任何一个模式匹配,则进入 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
}
}