オブジェクト
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 }
-
このメソッドをオーバーライドして、プライマリキーとして使用するプロパティの名前を指定します。
プライマリキーとして指定できるのは、
String
、Int
、ObjectId
、UUID
の各タイプのプロパティのみです。 プライマリキー プロパティでは、プロパティが設定されるたびに各値の一意性が強制されるため、マイナーなオーバーヘッドが発生します。 プライマリキー プロパティに対してインデックスが自動的に作成されます。警告
この関数は、@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 、整数、ブール値、
Date
、NSDate
プロパティのみがサポートされます。警告
この関数は、@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 }
-
オブジェクトが変更されるたびに呼び出されるブロックを登録します。
ブロックは、オブジェクトを削除する、またはプロパティを既存の値に設定する自己割り当てを含む、オブジェクトの管理されているプロパティのいずれかを変更する各書込みトランザクションの後に非同期に呼び出されます。
異なるスレッドまたは異なるプロセスで実行される書込みトランザクションの場合、ブロックは管理 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 // ... })
- 上記の通知ブロックは、 プロパティに対する変更に対しては起動しますが、
adopted
name
に加えられた変更に対しては起動しません。 - 確認されたキー パスが
["siblings"]
の場合、siblings
リストへの挿入、削除、または変更によってブロックがtriggerされます。someSibling.name
への変更ではブロックはtriggerされません(someSibling
はsiblings
に含まれる要素) 確認されたキー パスが
["siblings.name"]
の場合、siblings
リストへの挿入または削除によってブロックがtriggerされます。siblings
リストに含まれるオブジェクトの場合、name
プロパティが変更された場合のみブロックがtriggerされます。
注意
個別のキー パスでフィルタリングされる同じオブジェクト上の複数の通知トークンは、排他的にフィルタリングされません。 1 つの通知トークンに対して 1 つのキーパスの変更が満たされた場合、そのオブジェクトのすべての通知トークン ブロックが実行されます。
キューが指定されていない場合、通知は標準の実行ループを介して配信されるため、実行ループが他のアクティビティによってブロックされている間は通知を配信できません。 キューが指定されている場合、代わりにそのキューに通知が配信されます。 通知をすぐに配信できない場合は、複数の通知が 1 つの通知に統合されることがあります。
List
やResults
とは異なり、新しい通知ブロックを追加した後に実行される初期コールバックはありません。この方法では、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 // ... })
- 上記の通知ブロックは、 プロパティに対する変更に対しては起動しますが、
adopted
name
に加えられた変更に対しては起動しません。 - 確認されたキー パスが
[\Dog.siblings]
の場合、siblings
リストへの挿入、削除、または変更によってブロックがtriggerされます。someSibling.name
への変更ではブロックはtriggerされません(someSibling
はsiblings
に含まれる要素) 確認されたキー パスが
[\Dog.siblings.name]
の場合、siblings
リストへの挿入または削除によってブロックがtriggerされます。siblings
リストに含まれるオブジェクトの場合、name
プロパティが変更された場合のみブロックがtriggerされます。
注意
個別のキー パスでフィルタリングされる同じオブジェクト上の複数の通知トークンは、排他的にフィルタリングされません。 1 つの通知トークンに対して 1 つのキーパスの変更が満たされた場合、そのオブジェクトのすべての通知トークン ブロックが実行されます。
キューが指定されていない場合、通知は標準の実行ループを介して配信されるため、実行ループが他のアクティビティによってブロックされている間は通知を配信できません。 キューが指定されている場合、代わりにそのキューに通知が配信されます。 通知をすぐに配信できない場合は、複数の通知が 1 つの通知に統合されることがあります。
List
やResults
とは異なり、新しい通知ブロックを追加した後に実行される初期コールバックはありません。この方法では、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`?