noki雑記

iOS、ときどきAndroid

Associated Value を 条件式で処理する

enum で Associated Value を定義した際に、switch 文でしか条件式を組めないと思っていたのですが、if-case文やfor-case文なるものが swift2 から追加されていました。
下記のような感じです。

enum GameTitle {
    case dragonQuest(Int)
    case persona(Int)
}

let gameTitle: GameTitle = .dragonQuest(1)

if case .dragonQuest(1) = gameTitle {
    print("一人で竜王に立ち向かうとかマジ勇者")
}

if case .persona(let number) = gameTitle, number == 3 {
    print("映画になった")
}

let playedTitle: [GameTitle] = [.dragonQuest(1), .dragonQuest(2), .dragonQuest(6), .persona(3), .persona(4)]

for case .dragonQuest(let number) in playedTitle where number <= 3 {
    print("ドラクエ \(number) はリメイク版でならプレイしたことある")
}