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
这里,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
。