概要

以下のようなenumを定義したい場合のTips。

  • Associated Value(連想値)あり
  • RawRepresentableに準拠

例題

例えば、以下のようなenumを考える。

// RawRepresentable(String)に準拠したenum
enum Pattern: String {
    case a
    case b
}

print(Pattern.a.rawValue) // a
print(Pattern.b.rawValue) // b

このenumにAssociated Valueを付与したくなった場合、問題が生じる。

以下のように実装するとRawRepresentableに準拠できなくなり、'Pattern' declares raw type 'String', but does not conform to RawRepresentable and conformance could not be synthesizedというコンパイルエラーが表示される。

// RawRepresentable(String)に準拠したenum
enum Pattern: String {
    case a
    case b(value: Int)
}

print(Pattern.a.rawValue) // a
print(Pattern.b.rawValue) // b

解決策

RawRepresentableに準拠するためのコードを自分で実装する。ただし、なるべくケース名をハードコーディングしないように