こんにちは、kz_moritaです。\
最近になって、Swift のEnumの全要素を配列で取得できる便利な protocol である CaseIterable
について知ったのでそのことについて書きます。
Enumの全列挙子を配列として使用したいといった場合には、このCaseIterableを使うと簡単に実現できるためおすすめです。
ドキュメントはこちら
CaseIterable
CaseIterableで全列挙
SwiftにはEnumがあり以下のように列挙することができます。
enum Color {
case red
case blue
case green
case white
}
ここで、上記で定義したenumのColorの全パターンを取得したいとします。自分はCaseIterableを知る前は以下のように記述していました。
enum Color {
case red
case blue
case green
case white
// 全ケースを自分で定義
static var allCases: [Color] = [.red, .blue, .green, .white]
}
Color.allCases.map { /* do something. */ }
これがCaseIterableを使用すると以下のように記載することができます。
enum Color: CaseIterable {
case red
case blue
case green
case white
}
// 自分で定義しなくても、allCasesが使用できる
Color.allCases.map { /* do something. */ }
自分で定義する必要がないため、allCasesへの追記もれなどが起こらなくなってかなり便利になりました。
CaseIterableはSwift4.2から
CaseIterableはSwift4.2で実装されているため、それ以降のバージョンで使用可能です。 proposalはこちら Derived Collection of Enum Cases
CaseIterableが発表されたのは、WWDC18のセッション What’s New in Swift のなかの模様です。
まとめ
Swift4.2で導入されたCaseIterableについて今更ながら紹介しました。
基本的に便利になるため積極的に使っていくと良いかと思います。
現在はSwift5も出ているのでそちらの機能も随時キャッチアップしていこうと思います。