1

Optional在 Swift 中允许使用魔法 where switch-ing over an optionalenum将案例扁平化为单个 switch 语句。

鉴于:

enum Foo {
    case bar, baz
}

你可以:

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

在这里, Optionalis an enumand Foois an 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?也许有一个我可以使用的注释?

4

1 回答 1

2

你可以这样做……</p>

switch b {
case .nope: // stuff
case .dope(.yep): // other stuff
case .dope(.someOtherCase): // more stuff
}

回复您的评论...</p>

想象一下,你可以像你说的那样把它弄平。你会怎么处理……</p>

enum Foo {
    case a
    case b(Bar)
    case c(Bar)
}

如果允许您.b从开关中排除 ,则无法区分.b.c

于 2021-10-23T14:00:29.460 回答