使いたい日がまた来ると思うので備忘録。
以下を参考にさせていただきました。
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
}
}