【SwiftUI】Realmでenum(列挙型)を使用する方法!PersistableEnumプロトコル

この記事からわかること
- Realm Swiftライブラリ
- Realmでenum(列挙型)の使い方
- PersistableEnumプロトコルとは?
index
[open]
\ アプリをリリースしました /
Realmデータベースで列挙型を使用すつ方法をまとめていきたいと思います。
Realmでenum(列挙型)を使用する方法
Realmでデータベーステーブル定義する際に@Persisted
を付与したプロパティにシンプルなenum(列挙型)を指定するとエラーになってしまいます。
enum Relation{
case friend // 友達
case family // 家族
}
class User: Object ,ObjectKeyIdentifiable{
@Persisted(primaryKey: true) var id: ObjectId
@Persisted var name:String = "")
@Persisted var relation:Relation
}
エラー内容
Generic struct 'Persisted' requires that 'Relation' conform to '_Persistable'
Realmでは値型enum(raw value enum)のみ
公式リファレンスを見ると以下のように記述されていました。
引用:RealmSwift Protocols Reference
”Persisting an enum in Realm requires that it have a raw value and that the raw value by a type which Realm can store.”
”Realm で列挙型を永続化するには、生の値が必要であり、Realm が保存できるタイプの生の値が必要です。”
つまりRealmでは列挙型をデータベースに格納するには値型enum(raw value enum)でなければいけないようです。そもそも列挙型に定義した複数の要素(メンバー)には値を格納することができ、それを値型enum(raw value enum)と呼びます。
値型enumの例
enum Relation:String{
case friend = "friend" // 友達
case family = "family" // 家族
}
とはいえ値型enumにしても同様のエラーが発生してしまうので以下のプロトコルへの準拠が必要になります。
- PersistableEnumプロトコル
PersistableEnumプロトコル
PersistableEnum
プロトコルはRealm Swiftに組み込まれているプロトコルです。データベースクラスのプロパティに@Persisted
が付与されている場合は、列挙型にはPersistableEnumプロトコルへの準拠が必要になります。
enum Relation: String,PersistableEnum{
case friend // 友達
case family // 家族
}
これでエラーが解消でき、Realmデータベーステーブルクラスのプロパティに列挙型を指定できるようになりました。
おすすめ記事
【SwiftUI】Realmの@ObservedResultsの使い方!値の観測と解凍
【SwiftUI】Realmでプライマリーキーの設定方法!UUIDを指定
【SwiftUI】Realmのマイグレーション方法!Migration is required due to the following errorsの解決法
まだまだ勉強中ですので間違っている点や至らぬ点がありましたら教えていただけると助かります。
ご覧いただきありがとうございました。
私がSwift UI学習に使用した参考書
まだまだ勉強中ですので間違っている点や至らぬ点がありましたら教えていただけると助かります。
ご覧いただきありがとうございました。