Swiftのenumで定義した値を順番に取得する

  • 6
    いいね
  • 0
    コメント
この記事は最終更新日から1年以上が経過しています。

enumで定義した値を順番に使用したいときがたまにあります。

デフォルトではこれを実現するメソッドが用意されていないため、独自にenumにメソッドを追加します。

enum Fruit: Int {
    case Apple = 0
    case Orange
    case Banana

    static let values = [Apple, Orange, Banana]

    mutating func next() {
        let val = (self.rawValue + 1) % Fruit.values.count
        self = Fruit(rawValue: val)!
    }
}

このように実装することで、Apple -> Orange -> Banana -> Apple -> ... の順に値を使用できます。

この実装では要素数を取得するために、enumの値一覧をvaluesで定義しています。(Javaではデフォルトで用意されているので、若干不便。。。)

ちなみに、自身の値を変更する操作をしているため、メソッドにmutating修飾子を付与する必要があります。

おまけ

要素数が分かれば良いので、下記のようにenumの値の末尾にcounterを定義する方法でも大丈夫です。
(enumの要素としてcounterが定義されてしまうので微妙な感じですが。)

enum Fruit: Int {
    case Apple = 0
    case Orange
    case Banana
    case counter

    mutating func next() {
        let val = (self.rawValue + 1) % counter
        self = Fruit(rawValue: val)!
    }
}