オブジェクト

extension Object
extension Object: @retroactive ObservableObject
extension Object: _RealmCollectionValueInsideOptional
extension Object: ThreadConfined
  • オブジェクトが変更されるたびに Vid を発行する出版社。

    名前に関係なく、オブジェクトが変更されたにこれは実際に発行します。

    宣言

    Swift

    public var objectWillChange: RealmPublishers.WillChange<Object> { get }

初期化子

  • Realm オブジェクトの非マネージド インスタンスを作成します。

    value引数はオブジェクトにデータを入力するために使用されます。 キーと値に準拠したオブジェクト、 NSJSONSerializationのメソッドから返された配列または辞書、または管理されているプロパティごとに 1 つの要素を含むArrayにすることができます。 必須 プロパティが存在せず、それらのプロパティがデフォルト値で定義されていない場合は、例外がスローされます。

    value引数としてArrayを渡す場合、すべてのプロパティが存在し、有効で、モデルで定義されたプロパティと同じ順序にある必要があります。

    非マネージド オブジェクトをその Realm に追加するには、 Realmインスタンスでadd(_:)を呼び出します。

    宣言

    Swift

    public convenience init(value: Any)

    パラメーター

    value

    オブジェクトを入力するために使用される値。

プロパティ

  • オブジェクトを管理する Realm。オブジェクトが管理されていない場合はnil

    宣言

    Swift

    public var realm: Realm? { get }
  • オブジェクトの管理対象プロパティを一覧表示するオブジェクト スキーマ。

    宣言

    Swift

    public var objectSchema: ObjectSchema { get }
  • オブジェクトが無効になったためアクセスできなくなっているかどうかを示します。

    オブジェクトを管理する Realm からオブジェクトが削除された場合、またはその Realm でinvalidate()が呼び出された場合は、オブジェクトにアクセスできなくなります。 このプロパティは、キー値を観察できます。

    宣言

    Swift

    dynamic open override var isInvalidated: Bool { get }
  • 人間が判読可能なオブジェクトの説明。

    宣言

    Swift

    open override var description: String { get }

オブジェクトカスタマイズ

  • このメソッドをオーバーライドして、プライマリキーとして使用するプロパティの名前を指定します。

    プライマリキーとして指定できるのは、 StringIntObjectIdUUIDの各タイプのプロパティのみです。 プライマリキー プロパティでは、プロパティが設定されるたびに各値の一意性が強制されるため、マイナーなオーバーヘッドが発生します。 プライマリキー プロパティに対してインデックスが自動的に作成されます。

    警告

    この関数は、 @objcを使用しているレガシー プロパティ宣言にのみ適用されます。 @Persistedを使用する場合は、代わりに@Persisted(primaryKey: true)を使用してください。

    宣言

    Swift

    @objc
    open class func primaryKey() -> String?

    戻り値

    プライマリキーとして指定されたプロパティの名前。または、モデルにプライマリキーがない場合はnil

  • このメソッドをオーバーライドして、無視するプロパティの名前を指定します。 これらのプロパティは、オブジェクトを管理する Realm によって管理されません。

    警告

    この関数は、 @objcを使用しているレガシー プロパティ宣言にのみ適用されます。 @Persistedを使用する場合、 @Persistedでマークされていないプロパティは自動的に無視されます。

    宣言

    Swift

    @objc
    open class func ignoredProperties() -> [String]

    戻り値

    無視するプロパティ名の配列。

  • インデックスを作成する必要があるプロパティのプロパティ名の配列を返します。

    string 、整数、ブール値、DateNSDate プロパティのみがサポートされます。

    警告

    この関数は、 @objcを使用しているレガシー プロパティ宣言にのみ適用されます。 @Persistedを使用する場合は、代わりに@Persisted(indexed: true)を使用してください。

    宣言

    Swift

    @objc
    open class func indexedProperties() -> [String]

    戻り値

    プロパティ名の配列。

  • このメソッドをオーバーライドして、パブリックとプライベートのプロパティ名のマップを指定します。 これにより、Realm に別の永続プロパティ名が設定され、プロパティを使用するすべての操作で公開名を使用できるようになります。 (例: クエリ、ソートなど)。 これは、Device Sync JSON schemaのプロパティ名をローカル プロパティ名にマッピングする必要がある場合に非常に役立ちます。

    class Person: Object {
        @Persisted var firstName: String
        @Persisted var birthDate: Date
        @Persisted var age: Int
    
        override class public func propertiesMapping() -> [String : String] {
            ["firstName": "first_name",
             "birthDate": "birth_date"]
        }
    }
    

    注意

    異なる列名を持つプロパティのみをプロパティマッピング辞書に追加する必要があります。

    注意

    移行ブロック内で、パブリック/プライベート名を持つ古いプロパティを列挙する場合、プロパティ値を取得するには、パブリック 列名ではなく古い列名を使用する必要があります。
    let migrationBlock = { migration, oldSchemaVersion in
        migration.enumerateObjects(ofType: "Person", { oldObj, newObj in
           let oldPropertyValue = oldObj!["first_name"] as! String
           // Use this value in migration
        })
    }
    

    これは、プロパティの名前を変更するときにも行う必要があります。

    let migrationBlock = { migration, oldSchemaVersion in
        migration.renameProperty(onType: "Person", from: "first_name", to: "complete_name")
    }
    

    宣言

    Swift

    open override class func propertiesMapping() -> [String : String]

    戻り値

    パブリックとプライベートのプロパティ名の辞書。

キー値のコーディングとサブスクリプション

  • 指定された名前のプロパティの値を返すか設定します。

    宣言

    Swift

    @objc
    open subscript(key: String) -> Any? { get set }

notifications

  • オブジェクトが変更されるたびに呼び出されるブロックを登録します。

    ブロックは、オブジェクトを削除する、またはプロパティを既存の値に設定する自己割り当てを含む、オブジェクトの管理されているプロパティのいずれかを変更する各書込みトランザクションの後に非同期に呼び出されます。

    異なるスレッドまたは異なるプロセスで実行される書込みトランザクションの場合、ブロックは管理 Realm が変更を含むバージョンに(自動)更新されたときに呼び出されますが、ローカルの書込みトランザクションでは、将来のある時点で呼び出されます書込みトランザクション (write transaction) がコミットされた場合。

    キーパスが指定されていない場合、ブロックは、オブジェクトのすべてのオブジェクトプライマリプロパティの挿入、変更、または削除時に実行されます。 Object 通知はデフォルトでシャットダウンしているため、そのプロパティへのキーパスが指定されていない限り、ネストされたプロパティの変更によって通知がtriggerされることはありません。 キー パスが指定されている場合、指定されたキー パスでのみ発生する変更に対してブロックが呼び出されます。 たとえば、次の場合:

    class Dog: Object {
        @Persisted var name: String
        @Persisted var adopted: Bool
        @Persisted var siblings: List<Dog>
    }
    
    // ... where `dog` is a managed Dog object.
    dog.observe(keyPaths: ["adopted"], { changes in
       // ...
    })
    
    • 上記の通知ブロックは、 プロパティに対する変更に対しては起動しますが、adoptedname に加えられた変更に対しては起動しません。
    • 確認されたキー パスが ["siblings"] の場合、siblings リストへの挿入、削除、または変更によってブロックがtriggerされます。 someSibling.name への変更ではブロックはtriggerされません(someSiblingsiblings に含まれる要素)
    • 確認されたキー パスが ["siblings.name"] の場合、siblings リストへの挿入または削除によってブロックがtriggerされます。 siblings リストに含まれるオブジェクトの場合、name プロパティが変更された場合のみブロックがtriggerされます。

    注意

    個別のキー パスでフィルタリングされる同じオブジェクト上の複数の通知トークンは、排他的にフィルタリングされません。 1 つの通知トークンに対して 1 つのキーパスの変更が満たされた場合、そのオブジェクトのすべての通知トークン ブロックが実行されます。

    キューが指定されていない場合、通知は標準の実行ループを介して配信されるため、実行ループが他のアクティビティによってブロックされている間は通知を配信できません。 キューが指定されている場合、代わりにそのキューに通知が配信されます。 通知をすぐに配信できない場合は、複数の通知が 1 つの通知に統合されることがあります。

    ListResultsとは異なり、新しい通知ブロックを追加した後に実行される初期コールバックはありません。

    この方法では、Realm によって管理されているオブジェクトのみを監視できます。 アップデートをブロックに送信する場合は、返されたトークンを保持する必要があります。 更新の受信を停止するには、トークンでinvalidate()を呼び出します。

    コールバック ブロック内で監視対象オブジェクトへの強力な参照をキャプチャしても安全です。 コールバックはオブジェクト自体ではなく返されたトークンによって保持されるため、保持サイクルがありません。

    警告

    このメソッドは、書込みトランザクション中、または Realm を含む が読み取り専用の場合に呼び出すことができません。

    宣言

    Swift

    public func observe<T: RLMObjectBase>(keyPaths: [String]? = nil,
                                          on queue: DispatchQueue? = nil,
                                          _ block: @escaping (ObjectChange<T>) -> Void) -> NotificationToken

    パラメーター

    keyPaths

    キーパス配列に含まれるプロパティのみが変更されたときにブロックをtriggerします。 nilの場合、オブジェクトのプロパティ変更に対して通知が配信されます。 有効な プロパティに対応していないstringキー パスでは例外がスローされます。 リンクされたプロパティの詳細については、上記の説明を参照してください。

    queue

    通知を受信するシリアル ディスパッチ キュー。 nilの場合、通知は現在のスレッドに配信されます。

    block

    オブジェクトに対する変更に関する情報を呼び出すブロック。

    戻り値

    更新を配信する限り保持する必要があるトークン。

  • オブジェクトが変更されるたびに呼び出されるブロックを登録します。

    ブロックは、オブジェクトを削除する、またはプロパティを既存の値に設定する自己割り当てを含む、オブジェクトの管理されているプロパティのいずれかを変更する各書込みトランザクションの後に非同期に呼び出されます。

    異なるスレッドまたは異なるプロセスで実行される書込みトランザクションの場合、ブロックは管理 Realm が変更を含むバージョンに(自動)更新されたときに呼び出されますが、ローカルの書込みトランザクションでは、将来のある時点で呼び出されます書込みトランザクション (write transaction) がコミットされた場合。

    キーパスが指定されていない場合、ブロックは、オブジェクトのすべてのオブジェクトプライマリプロパティの挿入、変更、または削除時に実行されます。 Object 通知はデフォルトでシャットダウンしているため、そのプロパティへのキーパスが指定されていない限り、ネストされたプロパティの変更によって通知がtriggerされることはありません。 キー パスが指定されている場合、指定されたキー パスでのみ発生する変更に対してブロックが呼び出されます。 例えば、

    class Dog: Object {
        @Persisted var name: String
        @Persisted var adopted: Bool
        @Persisted var siblings: List<Dog>
    }
    
    // ... where `dog` is a managed Dog object.
    dog.observe(keyPaths: [\Dog.adopted], { changes in
       // ...
    })
    
    • 上記の通知ブロックは、 プロパティに対する変更に対しては起動しますが、adoptedname に加えられた変更に対しては起動しません。
    • 確認されたキー パスが [\Dog.siblings] の場合、siblings リストへの挿入、削除、または変更によってブロックがtriggerされます。 someSibling.name への変更ではブロックはtriggerされません(someSiblingsiblings に含まれる要素)
    • 確認されたキー パスが [\Dog.siblings.name] の場合、siblings リストへの挿入または削除によってブロックがtriggerされます。 siblings リストに含まれるオブジェクトの場合、name プロパティが変更された場合のみブロックがtriggerされます。

    注意

    個別のキー パスでフィルタリングされる同じオブジェクト上の複数の通知トークンは、排他的にフィルタリングされません。 1 つの通知トークンに対して 1 つのキーパスの変更が満たされた場合、そのオブジェクトのすべての通知トークン ブロックが実行されます。

    キューが指定されていない場合、通知は標準の実行ループを介して配信されるため、実行ループが他のアクティビティによってブロックされている間は通知を配信できません。 キューが指定されている場合、代わりにそのキューに通知が配信されます。 通知をすぐに配信できない場合は、複数の通知が 1 つの通知に統合されることがあります。

    ListResultsとは異なり、新しい通知ブロックを追加した後に実行される初期コールバックはありません。

    この方法では、Realm によって管理されているオブジェクトのみを監視できます。 アップデートをブロックに送信する場合は、返されたトークンを保持する必要があります。 更新の受信を停止するには、トークンでinvalidate()を呼び出します。

    コールバック ブロック内で監視対象オブジェクトへの強力な参照をキャプチャしても安全です。 コールバックはオブジェクト自体ではなく返されたトークンによって保持されるため、保持サイクルがありません。

    警告

    このメソッドは、書込みトランザクション中、または Realm を含む が読み取り専用の場合に呼び出すことができません。

    宣言

    Swift

    public func observe<T: ObjectBase>(keyPaths: [PartialKeyPath<T>],
                                       on queue: DispatchQueue? = nil,
                                       _ block: @escaping (ObjectChange<T>) -> Void) -> NotificationToken

    パラメーター

    keyPaths

    キーパス配列に含まれるプロパティのみが変更されたときにブロックをtriggerします。 nilの場合、オブジェクトのプロパティ変更に対して通知が配信されます。 リンクされたプロパティの詳細については、上記の説明を参照してください。

    queue

    通知を受信するシリアル ディスパッチ キュー。 nilの場合、通知は現在のスレッドに配信されます。

    block

    オブジェクトに対する変更に関する情報を呼び出すブロック。

    戻り値

    更新を配信する限り保持する必要があるトークン。

  • オブジェクトが変更されるたびに呼び出されるブロックを登録します。

    ブロックは、オブジェクトを削除するか、プロパティを既存の値に設定する自己割り当てを含む、オブジェクトの管理対象プロパティを変更する各書込みトランザクション後に、指定されたアクターの実行プログラムで非同期に呼び出されます。 ブロックには、要求されたアクターに分離されたオブジェクトのコピーが渡されます。これは、変更された内容に関する情報とともに、そのアクターで安全に使用できます。

    異なるスレッドまたは異なるプロセスで実行される書込みトランザクションの場合、ブロックは管理 Realm が変更を含むバージョンに(自動)更新されたときに呼び出されますが、ローカルの書込みトランザクションでは、将来のある時点で呼び出されます書込みトランザクション (write transaction) がコミットされた場合。

    この方法では、Realm によって管理されているオブジェクトのみを監視できます。 アップデートをブロックに送信する場合は、返されたトークンを保持する必要があります。 更新の受信を停止するには、トークンでinvalidate()を呼び出します。

    デフォルトでは、オブジェクトのプロパティを直接変更した場合にのみ通知が生成され、リンクされたオブジェクトは変更されません。 これはコレクション変更通知とは異なることに注意してください。 nil 以外の、空でないキーパス配列が渡される場合、それらのキーパスで識別されるプロパティに対する変更のみが変更通知を生成します。 キーパスは、リンクプロパティを走査して、リンクされたオブジェクトの変更に関する情報を受け取る場合があります。

    警告

    このメソッドは、書込みトランザクション中、または Realm を含む が読み取り専用の場合に呼び出すことができません。

    宣言

    Swift

    @available(macOS 10.15, tvOS 13.0, iOS 13.0, watchOS 6.0, *)
    public func observe<A: Actor, T: Object>(
        keyPaths: [String]? = nil, on actor: A,
        _isolation: isolated (any Actor)? = #isolation,
        _ block: @Sendable @escaping (isolated A, ObjectChange<T>) -> Void
    ) async -> NotificationToken

    パラメーター

    actor

    通知を分離するアクター。

    block

    オブジェクトに対する変更に関する情報を呼び出すブロック。

    戻り値

    更新を配信する限り保持する必要があるトークン。

  • オブジェクトが変更されるたびに呼び出されるブロックを登録します。

    ブロックは、オブジェクトを削除するか、プロパティを既存の値に設定する自己割り当てを含む、オブジェクトの管理対象プロパティを変更する各書込みトランザクション後に、指定されたアクターの実行プログラムで非同期に呼び出されます。 ブロックには、要求されたアクターに分離されたオブジェクトのコピーが渡されます。これは、変更された内容に関する情報とともに、そのアクターで安全に使用できます。

    異なるスレッドまたは異なるプロセスで実行される書込みトランザクションの場合、ブロックは管理 Realm が変更を含むバージョンに(自動)更新されたときに呼び出されますが、ローカルの書込みトランザクションでは、将来のある時点で呼び出されます書込みトランザクション (write transaction) がコミットされた場合。

    この方法では、Realm によって管理されているオブジェクトのみを監視できます。 アップデートをブロックに送信する場合は、返されたトークンを保持する必要があります。 更新の受信を停止するには、トークンでinvalidate()を呼び出します。

    デフォルトでは、オブジェクトのプロパティを直接変更した場合にのみ通知が生成され、リンクされたオブジェクトは変更されません。 これはコレクション変更通知とは異なることに注意してください。 nil 以外の、空でないキーパス配列が渡される場合、それらのキーパスで識別されるプロパティに対する変更のみが変更通知を生成します。 キーパスは、リンクプロパティを走査して、リンクされたオブジェクトの変更に関する情報を受け取る場合があります。

    警告

    このメソッドは、書込みトランザクション中、または Realm を含む が読み取り専用の場合に呼び出すことができません。

    宣言

    Swift

    @available(macOS 10.15, tvOS 13.0, iOS 13.0, watchOS 6.0, *)
    public func observe<A: Actor, T: Object>(
        keyPaths: [PartialKeyPath<T>], on actor: A,
        _isolation: isolated (any Actor)? = #isolation,
        _ block: @Sendable @escaping (isolated A, ObjectChange<T>) -> Void
    ) async -> NotificationToken

    パラメーター

    actor

    通知を分離するアクター。

    block

    オブジェクトに対する変更に関する情報を呼び出すブロック。

    戻り値

    更新を配信する限り保持する必要があるトークン。

比較

  • 2 つの Realm オブジェクトが同じかどうかを返します。

    オブジェクトは同じ Realm によって管理され、データベース内の同じ基礎オブジェクトを指している場合にのみ、同じと見なされます。

    注意

    等価比較はisEqual(_:)によって実装されています。 オブジェクトタイプがプライマリキーで定義されている場合、 isEqual(_:)はこのメソッドと同じように動作します。 オブジェクトタイプがプライマリキーで定義されていない場合、 isEqual(_:)はオブジェクト ID を比較するためにNSObjectの動作を使用します。 このメソッドは、オブジェクトタイプがプライマリキーを定義するかどうかにかかわらず、データベースの等価性について 2 つのオブジェクトを比較するために使用できます。

    宣言

    Swift

    public func isSameObject(as object: Object?) -> Bool

    パラメーター

    object

    レシーバーを比較するオブジェクト。

  • このオブジェクトが固定されているかどうかを示します。

    詳細は、次を参照してください:

    Object.freeze()

    宣言

    Swift

    public var isFrozen: Bool { get }
  • このオブジェクトの固定(不変)スナップショットを返します。

    固定されたコピーは、このオブジェクトが現在含まれているデータと同じデータを含む不変のオブジェクトですが、含まれている Realm に書込み (write) が行われた場合は更新されません。 ライブオブジェクトと違い、固定オブジェクトには任意のスレッドからアクセスできます。

    警告

    Realm で書込みトランザクションを実行中に固定されたオブジェクトを長時間保持すると、Realm ファイルのサイズが大きくなる可能性があります。 詳しくは、 Realm.Configuration.maximumNumberOfActiveVersionsを参照してください。

    警告

    このメソッドは、管理対象のオブジェクトでのみ呼び出せます。

    宣言

    Swift

    public func freeze() -> Self
  • このオブジェクトのライブ(可変)参照を返します。

    このメソッドでは、同じ固定オブジェクトのライブ コピーへの管理対象アアクセス権が作成されます。 すでに存在するオブジェクトで呼び出される場合は、自分自身を返します。

    宣言

    Swift

    public func thaw() -> `Self`?