如何聲明一個允許“扁平化”的`switch`語句的`enum`的`enum`?

艾薩克·韋斯伯格

Optional在 Swift 中,可以使用switch-ing 來實現一個可選項enum將 case 扁平化為單個 switch 語句的魔法

鑑於:

enum Foo {
    case bar, baz
}

你可以:

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

在這裡,Optionalis anenumFoois 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也許有一個我可以使用的註釋?

迷霧大師

你可以用……

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

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章