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

この記事からわかること
- Realm Swiftの@Persistedプロパティラッパーとは?
- 役割や意味と使い方
- @Persisted付与しないとどうなる?
index
[open]
\ アプリをリリースしました /
クラスプラットフォームデータベースである「Realm」のSwift SDK(Realm Swift)で提供されている@Persistedプロパティラッパーについてまとめていきます。
@Persistedプロパティラッパーとは?
@propertyWrapper
public struct Persisted where Value : _Persistable
extension Persisted: Decodable where Value: Decodable
extension Persisted: Encodable where Value: Encodable
extension Persisted: OptionalCodingWrapper where Value: ExpressibleByNilLiteral
Realm Swiftでデータベース用のテーブルを定義する際に使用するのが@Persisted
です。
class Notification: Object ,ObjectKeyIdentifiable{
@Persisted(primaryKey: true) var id:UUID = UUID()
@Persisted var body:String
@Persisted var date:Date = Date()
}
@PersistedはRealm Swiftに用意されているプロパティラッパーの1つであり、上記のようにクラスのプロパティに付与して使用します。
「Persisted」は「持続する、残存する、継続する」と言った意味をもつ英単語であり「パーシスト」と読みます。
Realmにおける役割
@Persistedプロパティラッパーの役割は対象オブジェクトのプロパティを永続化することです。「プロパティを永続化」とはRealmデータベースのメリットである「アプリを停止後にもデータを保存し、再度起動後にデータにアクセスできること」を指します。
@Persistedを付与したプロパティのみがデータベースに格納され、付与されていないプロパティは一時的にメモリに保存されアプリが停止(オブジェクトが解放)されると消滅します。
class Notification: Object ,ObjectKeyIdentifiable{
@Persisted(primaryKey: true) var id:UUID = UUID()
@Persisted var body:String
var date:Date = Date() // これは保存されなくなる
}
自動で初期化
また@Persistedプロパティラッパーは、プロパティを自動的に初期化してくれるので初期値を設定する必要がなく、コンストラクタで初期化する必要もありません。
class Person: Object {
@Persisted var name: String
@Persisted var age: Int
@Persisted var address: String?
}
保存できる型
- Bool
- Int
- Int8
- Int16
- Int32
- Int64
- Float
- Double
- String
- Data
- Date
- ObjectId
プライマリーキーの指定
@Persistedのイニシャライザ(primaryKey:)を使用することでもプライマリーキーを設定することが可能です。
class Notification: Object ,ObjectKeyIdentifiable{
@Persisted(primaryKey: true) var id:UUID = UUID()
@Persisted var body:String
@Persisted var date:Date = Date()
}
まだまだ勉強中ですので間違っている点や至らぬ点がありましたら教えていただけると助かります。
ご覧いただきありがとうございました。
個人開発に限界を感じたらiOSに特化したプログラミングスクール「iOSアカデミア」も検討してみてください!無料相談可能で「最短・最速」でiOSエンジニアになれるように手助けしてくれます。