永続化

@propertyWrapper
public struct Persisted<Value> where Value : _Persistable
extension Persisted: Decodable where Value: Decodable
extension Persisted: Encodable where Value: Encodable
extension Persisted: OptionalCodingWrapper where Value: ExpressibleByNilLiteral

@Persisted は、Realm によって管理される必要があるオブジェクト サブクラスのプロパティを宣言するために使用されます。

使用例:

class MyModel: Object {
    // A basic property declaration. A property with no
    // default value supplied will default to `nil` for
    // Optional types, zero for numeric types, false for Bool,
    // an empty string/data, and a new random value for UUID
    // and ObjectID.
    @Persisted var basicIntProperty: Int

    // Custom default values can be specified with the
    // standard Swift syntax
    @Persisted var intWithCustomDefault: Int = 5

    // Properties can be indexed by passing `indexed: true`
    // to the initializer.
    @Persisted(indexed: true) var indexedString: String

    // Properties can set as the class's primary key by
    // passing `primaryKey: true` to the initializer
    @Persisted(primaryKey: true) var _id: ObjectId

    // List and set properties should always be declared
    // with `: List` rather than `= List()`
    @Persisted var listProperty: List<Int>
    @Persisted var setProperty: MutableSet<MyObject>

    // LinkingObjects properties require setting the source
    // object link property name in the initializer
    @Persisted(originProperty: "outgoingLink")
    var incomingLinks: LinkingObjects<OtherModel>

    // Properties which are not marked with @Persisted will
    // be ignored entirely by Realm.
    var ignoredProperty = true
}

Int、ブール、string、ObjectId、Date プロパティは、初期化子にindexed: trueを渡すことでインデックス化できます。 プロパティをインデックス化すると、そのプロパティに対する等価クエリのパフォーマンスが向上しますが、書込みパフォーマンスは若干低下します。 現在、インデックスを使用している他の操作はありません。

初期化子にprimaryKey: trueを渡すことで、プロパティをクラスのプライマリキーとして設定できます。 複合プライマリキーはサポートされていません。プライマリキーとして複数のプロパティを設定すると、実行時に例外がスローされます。 Int、 string 、UUID、およびObjectIdプロパティのみをプライマリキーにすることができます。Atlas Atlas App Servicesを使用する場合は、プライマリキーの名前を _id にする必要があります。 プライマリキー プロパティは、管理されていないオブジェクトでのみミューテーションでき、Realm に追加されたオブジェクトでそれを変更すると例外がスローされます。

オプションで、標準の Swift 構文を使用してプロパティにデフォルト値を設定できます。 デフォルト値が指定されていない場合、最初のアクセス時に値が生成されます。すべてのオプション型は nil、数値型はゼロ、ブール値は false、空のstring /data、 UUID とObjectIdの新しいランダム値。 List プロパティと MutableSet プロパティは、空の List/MutableSet のデフォルト値に設定して定義しないでください。 同様に操作を実行すると機能しますが、Realm によって管理されているオブジェクトにアクセスする際のパフォーマンスは低下します。 同様に、 ObjectIdプロパティは ObjectID.generate() に初期化されないでください。そうすると、 Realmからの読み取り時に、余計な ObjectID が生成され、その後破棄されるためです。

クラスに少なくとも 1 つの @Persisted プロパティがある場合、Realm は他のすべてのプロパティを無視します。 つまり、これらは永続化されず、クエリやその他の操作(ソートや集計など)管理されたプロパティを必要とする操作では使用されません。

@Persisted は、 Object または 埋め込み Object サブクラスのプロパティとして以外の場所で使用することはできず、他の場所で使用しようとするとランタイムエラーが発生します。

  • 型のデフォルト値に遅延初期化されるプロパティを宣言します。

    宣言

    Swift

    public init()
  • 指定された値にデフォルト設定されるプロパティを宣言します。

    宣言

    Swift

    public init(wrappedValue value: Value)

Value : Decodableで利用可能

Value : Encodableで利用可能

Value.PersistedType : _Indexableで利用可能

  • 型のデフォルト値に遅延初期化されるインデックス付きプロパティを宣言します。

    宣言

    Swift

    public init(indexed: Bool)
  • 指定された値になるデフォルトのインデックス付きプロパティを宣言します。

    宣言

    Swift

    public init(wrappedValue value: Value, indexed: Bool)

Value.PersistedType : _PrimaryKeyで利用可能

  • 型のデフォルト値に遅延して初期化されるプライマリキー プロパティを宣言します。

    宣言

    Swift

    public init(primaryKey: Bool)
  • 指定された値にデフォルト設定されるプライマリキー プロパティを宣言します。

    宣言

    Swift

    public init(wrappedValue value: Value, primaryKey: Bool)

Value : LinkingObjectsProtocolで利用可能

  • 指定された元のプロパティ名を持つ LinkingObjects プロパティを宣言します。

    • パラメータ oringProperty: このオブジェクトにリンクするリンク オブジェクトタイプのプロパティの名前。

    宣言

    Swift

    public init(originProperty: String)