Posted at

Stringなど、Int以外のenumの中身をfor in~などで列挙する

More than 1 year has passed since last update.

使いたい日がまた来ると思うので備忘録。

以下を参考にさせていただきました。

http://stackoverflow.com/questions/24007461/how-to-enumerate-an-enum-with-string-type


コード

環境:Swift2.3

※諸事情により3.0以降ではない。注意


Vegetable.swift

enum Vegetable: String {

case carrot = "にんじん"
case onion = "たまねぎ"
case potato = "じゃがいも"

/**
Vegetableの配列を取得する
*/

static func iterateEnum<T: Hashable>(_: T.Type) -> AnyGenerator<Vegetable> {
var i = 0
return AnyGenerator {
defer { i += 1 }
let next = withUnsafePointer(&i) { UnsafePointer<Vegetable>($0).memory }
return next.hashValue == i ? next : nil
}
}

/**
Vegetableの要素一覧を取得する
- returns Vegetable要素一覧
*/

static func getVegetables() -> [Vegetable] {
var vegetables = [Vegetable]()
for vegetable in Vegetable.iterateEnum(Vegetable) {
vegetables.append(vegetable)
}
return vegetables
}
}