如何声明"枚举"的"枚举"以允许"flattened""切换"语句?



Swift中的Optional允许在可选的enum上使用switch-ing将情况扁平化为单个switch语句。

给定:

enum Foo {
case bar, baz
}

您可以:

let foo: Foo? = .bar
switch foo {
case .bar:
break
case .baz:
break
case nil:
break

这里,Optionalenum,Fooenum,但是仅仅一个语句就足以涵盖这两种情况。

问题:我是否可以在另一个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

最新更新