如何声明允许 "flattened" `switch` 语句的 `enum` 的 `enum`?
How to declare an `enum` of `enum` that allows for "flattened" `switch` statement?
Optional
in Swift 允许魔术,其中 switch
-ing 可选 enum
将案例扁平化为单个 switch 语句。
给定:
enum Foo {
case bar, baz
}
您可以:
let foo: Foo? = .bar
switch foo {
case .bar:
break
case .baz:
break
case nil:
break
这里,Optional
是一个enum
,Foo
是一个enum
,但是只要一个语句就足以涵盖两者的所有情况。
问题:我可以在另一个 enum
中声明自己的 enum
以便案件也能以扁平的方式处理吗?
这样我就可以:
enum Foo<Bar> {
case nope
case dope(Bar)
}
enum Baz {
case yep
}
let b: Foo<Baz> = .dope(.yep)
switch b {
case .nope:
break
case .yep:
break
}
也许如果我将案例 Foo.dope
称为 Foo.some
?也许有我可以使用的注释?
你可以用……
switch b {
case .nope: // stuff
case .dope(.yep): // other stuff
case .dope(.someOtherCase): // more stuff
}
正在回复您的评论…
想象一下,你可以像你说的那样把它弄平。你会如何处理...
enum Foo {
case a
case b(Bar)
case c(Bar)
}
如果允许从开关中排除 .b
,则无法区分 .b
和 .c
。
Optional
in Swift 允许魔术,其中 switch
-ing 可选 enum
将案例扁平化为单个 switch 语句。
给定:
enum Foo {
case bar, baz
}
您可以:
let foo: Foo? = .bar
switch foo {
case .bar:
break
case .baz:
break
case nil:
break
这里,Optional
是一个enum
,Foo
是一个enum
,但是只要一个语句就足以涵盖两者的所有情况。
问题:我可以在另一个 enum
中声明自己的 enum
以便案件也能以扁平的方式处理吗?
这样我就可以:
enum Foo<Bar> {
case nope
case dope(Bar)
}
enum Baz {
case yep
}
let b: Foo<Baz> = .dope(.yep)
switch b {
case .nope:
break
case .yep:
break
}
也许如果我将案例 Foo.dope
称为 Foo.some
?也许有我可以使用的注释?
你可以用……
switch b {
case .nope: // stuff
case .dope(.yep): // other stuff
case .dope(.someOtherCase): // more stuff
}
正在回复您的评论…
想象一下,你可以像你说的那样把它弄平。你会如何处理...
enum Foo {
case a
case b(Bar)
case c(Bar)
}
如果允许从开关中排除 .b
,则无法区分 .b
和 .c
。