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