且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

如何使用带有嵌套枚举的 switch 语句?

更新时间:2022-11-21 21:59:24

出于几个原因,我添加了一个更通用的答案.

I'm adding a more general answer for a few reasons.

  1. 这是关于嵌套枚举和 switch 语句的唯一悬而未决的问题.另一个遗憾地关闭了.
  2. 唯一合法的答案没有显示如何将嵌套枚举的值分配给符号.语法对我来说并不直观.
  3. 其他答案都没有广泛的案例.
  4. 嵌套 3 层的枚举更能说明所需的语法.使用 efremidze 答案仍然需要我一段时间才能解决.


enum Action {
    case fighter(F)
    case weapon(W)

    enum F {
        case attack(A)
        case defend(D)
        case hurt(H)

        enum A {
            case fail
            case success
        }
        enum D {
            case fail
            case success
        }
        enum H {
            case none
            case some
        }
    }
    enum W {
        case swing
        case back
    }
}

// Matches "3 deep"
let action = Action.fighter(.attack(.fail))
// Matches "1 deep" because more general case listed first.
let action2 = Action.weapon(.swing)

switch action {
case .fighter(.attack(.fail)):
    print("3 deep")
case .weapon:
    print("1 deep")
case .weapon(.swing):
    print("2 deep to case")
case .fighter(.attack):
    print("2 deep to another enum level")
default:
    print("WTF enum")
}