Swift

[Swift]enumにunknownを生やし、switchではdefaultを禁止すると良いのでは

課題感

enumの要素を増やした場合に、defaultでもみ消しているswitch文はコンパイルを通過し影響範囲をコンパイラが認識出来ない。

提案

enumにunknown要素を必ず入れ、イニシャライズは失敗するとunknownを返すmake関数を利用する。
switch文ではdefaultを禁止する

効果

enumの要素が増えるとswitch文でコンパイルエラーが発生し、影響範囲と対応が必須になる。

実装

enum State: Int {
  case unknown = 0
  case idle
  case processing
  case finished

  static func make(rawValue: Int) -> State {
    return State(rawValue: rawValue) ?? .unknown
  }
}
switch state {
case .idle: print("idle")
case .processing: print("processing")
case .finished: print("finished")
case .unknown: break
}

議論

switchにdefaultを使わない事を強制出来るか…?(linter?)
unknownが必須にすることを強制出来るか…?
enumにrawValueが必須になることで起こる問題無いかな…?