【Swift/Realm】@Persistedプロパティラッパーとは?役割や意味

この記事からわかること
- Realm Swiftの@Persistedプロパティラッパーとは?
- 役割や意味と使い方
- @Persisted付与しないとどうなる?
index
[open]
\ アプリをリリースしました /
クラスプラットフォームデータベースである「Realm」のSwift SDK(Realm Swift)で提供されている@Persistedプロパティラッパーについてまとめていきます。
@Persistedプロパティラッパーとは?
Realm Swiftでデータベース用のテーブルを定義する際に使用するのが@Persisted
です。
@PersistedはRealm Swiftに用意されているプロパティラッパーの1つであり、上記のようにクラスのプロパティに付与して使用します。
「Persisted」は「持続する、残存する、継続する」と言った意味をもつ英単語であり「パーシスト」と読みます。
Realmにおける役割
@Persistedプロパティラッパーの役割は対象オブジェクトのプロパティを永続化することです。「プロパティを永続化」とはRealmデータベースのメリットである「アプリを停止後にもデータを保存し、再度起動後にデータにアクセスできること」を指します。
@Persistedを付与したプロパティのみがデータベースに格納され、付与されていないプロパティは一時的にメモリに保存されアプリが停止(オブジェクトが解放)されると消滅します。
自動で初期化
また@Persistedプロパティラッパーは、プロパティを自動的に初期化してくれるので初期値を設定する必要がなく、コンストラクタで初期化する必要もありません。
保存できる型
- Bool
- Int
- Int8
- Int16
- Int32
- Int64
- Float
- Double
- String
- Data
- Date
- ObjectId
プライマリーキーの指定
@Persistedのイニシャライザ(primaryKey:)を使用することでもプライマリーキーを設定することが可能です。
@Persistedを付与しない場合の注意点
@Persistedを付与しないことでデータベースに保存されないことが原因で、filterメソッドが動作しなくなってしまうようです。
発生するエラー
printメソッドで出力されない
クラスインスタンスをprint
メソッドで出力しようとすると@Persisted
を付与していないプロパティは表示されませんでした。
インスタンスからドットシンタックスでアクセスすることは可能であり、以下のように明示的に指定すれば表示させることができました。
まだまだ勉強中ですので間違っている点や至らぬ点がありましたら教えていただけると助かります。
ご覧いただきありがとうございました。