【Swift】「Raw value for enum case must be a literal」とは?
この記事からわかること
- Swiftのenumの使い方
- 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
経由で文字リソースにアクセスし、enum
のrawValue
の値を定義したかったので以下のように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
}
}
}
まだまだ勉強中ですので間違っている点や至らぬ点がありましたら教えていただけると助かります。
ご覧いただきありがとうございました。