LoginSignup
5

More than 5 years have passed since last update.

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

Last updated at Posted at 2016-01-04

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)!
    }
}

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
What you can do with signing up
5