LoginSignup
1
2

More than 5 years have passed since last update.

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

Posted at

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

1
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
2