让我们假设我有某种枚举-“ A”,其中还有3个枚举-“ B”,“ C”,“ D” 所以看起来像这样
enum A {
enum B {
}
enum C {
}
enum D {
}
}
是否有可能像我遍历case
值那样迭代思想B,C,D?
编辑
我想从A中获取所有枚举,就像我从B,C,D中获取所有枚举一样,以便在循环中使用它们
答案 0 :(得分:0)
Any
没问题A.B
、A.C
和 A.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)
}