SwiftのenumとFailable Initializers
基本的なenumの作り方は以下。
enum CoffeeShop { case starbucks case doutor case tullys } let shop1 = CoffeeShop.starbucks // starbucks
何かのデータから数字をもらって、値を返すようなことがしたければ、 これにIniitializerをつけて以下のようにできる。
enum CoffeeShop { case starbucks case doutor case tullys init(id: Int) { switch id { case 0: self = .starbucks case 1: self = .doutor case 2: self = .tullys default: self = .starbucks } } } let shop2 = CoffeeShop(id: 1) // doudor
この場合switch文は考慮されうる範囲(idに0, 1, 2以外のものが来た場合)を全て許容しなければならないのでdefaultが必要になる。
let shop2 = CoffeeShop(id: 10) // starbucks
しかし、基本的にdefaultをstarbucksとしておくことは、イレギュラーだと考えられるので、Failable Initializersというものをつかう。
enum CoffeeShop { case starbucks case doutor case tullys init?(id: Int) { switch id { case 0: self = .starbucks case 1: self = .doutor case 2: self = .tullys default: return nil } } } let shop2 = CoffeeShop(id: 100) // nil
これは、初期化に失敗できるイニシャライザで失敗した時、今回の場合だと想定していない数字が来た時に return nil
でnilを返すことで結果がないことを明示できる。
意外と便利で今後活用していく予定です。