如何在枚举中的所有枚举之间进行迭代

时间:2018-10-17 09:25:42

标签: swift enums enumeration

让我们假设我有某种枚举-“ A”,其中还有3个枚举-“ B”,“ C”,“ D” 所以看起来像这样

enum A  {
    enum B {
    }
    enum C {
    }
    enum D {
    }
}

是否有可能像我遍历case值那样迭代思想B,C,D?

编辑

我想从A中获取所有枚举,就像我从B,C,D中获取所有枚举一样,以便在循环中使用它们

2 个答案:

答案 0 :(得分:0)

有可能...只有当你对 Any 没问题

A.BA.CA.D 都是完全不同的类型。
将它们全部分组在一个数组中意味着它的类型为:[Any]

enum A {
    enum B: CaseIterable { case foo, bar }
    enum C: CaseIterable { case foo, bar }
    enum D: CaseIterable { case foo, bar }

    // Here is what I added. It's familiar to `allCases` from the `CaseIterable` protocol
    static var allRecursiveEnumCases: [Any] { B.allCases + C.allCases + D.allCases }
}

让我们尝试访问它们!
唯一的方法是通过向下转换:

for i in A.allRecursiveEnumCases {
    if let enumB = i as? A.B {
        print("A.B.\(enumB)")
    } else if let enumC = i as? A.C {
        print("A.C.\(enumC)")
    } else if let enumD = i as? A.D {
        print("A.D.\(enumD)")
    }
}

// Output:
// A.B.foo
// A.B.bar
// A.C.foo
// A.C.bar
// A.D.foo
// A.D.bar

答案 1 :(得分:-1)

尝试所有情况

for obj A.allCases {
print(obj)
}