Enum上的内省和迭代

cfi*_*her 4 enums introspection swift swift2

是否有可能以编程方式找出Enum在Swift 2中有多少"案例"并迭代它们?

这段代码不能编译,但它让你知道我想要实现的目标:

enum HeaderStyles{

    case h1
    case h2
    case h3
}

for item in HeaderStyles{
    print(item)
}
Run Code Online (Sandbox Code Playgroud)

Qby*_*yte 6

迭代所有情况的最简单方法是创建一个返回其中一个的计算属性Array:

enum SomeEnum {
    case Zero, One, Two

    static var allCases: [SomeEnum] {
        return [.Zero, .One, .Two]
    }
}
Run Code Online (Sandbox Code Playgroud)

如果你想要一个自动数组,你可以使用IntrawValue,这样你就不必在添加额外的代码时更改任何代码case:

斯威夫特3/4: ++--被拆除,并anyGenerator更名为AnyIterator

enum SomeEnum: Int {
    case Zero, One, Two

    static var allCases: [SomeEnum] {
        var i = 0
        return Array(AnyIterator{
            let newEnum = SomeEnum(rawValue: i)
            i += 1
            return newEnum
        })
    }
}
Run Code Online (Sandbox Code Playgroud)

斯威夫特2

enum SomeEnum: Int {
    case Zero, One, Two

    static var allCases: [SomeEnum] {
        var i = 0
        return Array(anyGenerator{ SomeEnum(rawValue: i++) })
    }
}
Run Code Online (Sandbox Code Playgroud)

在这两种情况下,您都会像这样使用它:

for num in SomeEnum.allCases {
    // ...
}
Run Code Online (Sandbox Code Playgroud)