コンテンツへスキップ →

Enumの配列から特定の値のみ取得する方法【Swift】

enumの配列から特定の値のみ取得したい場合はfilterを使います。

import UIKit

enum Pokemon {
    case pikachu
    case zenigame
    case hitokage
    case hushigidane
}

var pokemons: [Pokemon] = [.pikachu, .hitokage, .zenigame, .hushigidane]

print(pokemons) // [Pokemon.pikachu, Pokemon.hitokage, Pokemon.zenigame, Pokemon.hushigidane]

// ピカチューのみ欲しい場合
pokemons = pokemons.filter({ pokemon in
    switch pokemon {
    case .pikachu: return true
    default: return false
    }
})

print(pokemons) // [Pokemon.pikachu]

filterは条件式がtrueの場合返却されるのでswitch文を使い、ピカチューのみを取得しています。

逆にxxxは除外し、残りを全取得したい場合はfalseで指定します。

pokemons = pokemons.filter({ pokemon in
    switch pokemon {
    case .pikachu, .hitokage, .zenigame: return false
    default: return true
    }
})

print(pokemons) // [Pokemon.hushigidane]

参考

https://stackoverflow.com/questions/52993205/how-do-i-remove-a-value-from-swift-array-of-enums

カテゴリー: iOS