【Swift】「Raw value for enum case must be a literal」とは?

この記事からわかること

  • Swiftenum使い方
  • Raw value for enum case must be a literalとは?
  • rawValueインスタンス渡す

index

[open]

\ アプリをリリースしました /

みんなの誕生日

友達や家族の誕生日をメモ!通知も届く-みんなの誕生日-

posted withアプリーチ

Swiftのenumにインスタンスのタイププロパティ(static)を渡そうとしたところRaw value for enum case must be a literalとうエラーが発生しました。

enum FontFamilys: String, CaseIterable, Identifiable {
    var id:String { self.rawValue }
    
    // ↓Raw value for enum case must be a literal
    case monospaced = L10n.monospaced
    case rounded = L10n.rounded
    case serif = L10n.serif

}

enumのcaseに渡せるのはリテラル(コンパイル時に値が既に定まっているもの)のみのようです。そのため式やインスタンスのプロパティなどを渡すことはできません

SwiftGenなどを使用してローカライズした際にはL10n経由で文字リソースにアクセスし、enumrawValueの値を定義したかったので以下のようにrawValueプロパティを強制的に上書きすることで解消することができました。

enum FontFamilys: String, CaseIterable, Identifiable {
    var id:String { self.rawValue }
    
    case monospaced 
    case rounded
    case serif
    
    public var rawValue: String {
        switch self {
        case .monospaced:
            return L10n.monospaced
        case .rounded:
            return L10n.rounded
        case .serif:
            return L10n.serif
        }
    }
}

まだまだ勉強中ですので間違っている点や至らぬ点がありましたら教えていただけると助かります。

ご覧いただきありがとうございました。

searchbox

スポンサー

ProFile

ame

趣味:読書,プログラミング学習,サイト制作,ブログ

IT嫌いを克服するためにITパスを取得しようと勉強してからサイト制作が趣味に変わりました笑
今はCMSを使わずこのサイトを完全自作でサイト運営中〜

New Article

index