ProjectionObservable
public protocol ProjectionObservable : AnyObject, ThreadConfined
プロジェクションを削除したタイプ。
ProjectionObservable は 組み合わせ パブリッシャー
-
プロジェクションの基礎となるタイプ - Realm
Object
またはEmbeddedObject
の子。宣言
Swift
associatedtype Root : RLMObjectBase
-
プロジェクションされるオブジェクト
宣言
Swift
var rootObject: Root { get }
-
observe(keyPaths:
拡張メソッドon: _: ) プロジェクションの基礎となるオブジェクトが変更されるたびに呼び出されるブロックを登録します。
ブロックは、基礎となるオブジェクトを削除するか、プロパティを既存の値に設定する自己割り当てを含む、オブジェクトのプロジェクションされたプロパティのいずれかを変更する各書込みトランザクションの後に非同期に呼び出されます。
異なるスレッドまたは異なるプロセスで実行される書込みトランザクションの場合、ブロックは管理 Realm が変更を含むバージョンに(自動)更新されたときに呼び出されますが、ローカルの書込みトランザクションでは、将来のある時点で呼び出されます書込みトランザクション (write transaction) がコミットされた場合。
キー パスが指定されていない場合、ブロックは、ネストされたリンクされたオブジェクトのプロジェクションされたプロパティを含む、すべてのプロジェクションされたプロパティの挿入、変更、または削除時に実行されます。 キー パスが指定されている場合、指定されたキー パスでのみ発生する変更に対してブロックが呼び出されます。 たとえば、次の場合:
class Person: Object { @Persisted var firstName: String @Persisted var lastName = "" @Persisted public var friends: List<Person> } class PersonProjection: Projection<Person> { @Projected(\Person.firstName) var name @Projected(\Person.lastName.localizedUppercase) var lastNameCaps @Projected(\Person.friends.projectTo.firstName) var firstFriendsName: ProjectedCollection<String> } let token = projectedPerson.observe(keyPaths: ["name"], { changes in // ... })
- 上記の通知ブロックは、プロジェクションの基礎となる
Person
オブジェクトのPerson.firstName
プロパティに対する変更に対して起動しますが、Person.lastName
またはPerson.friends
リストに加えられた変更に対しては起動しません。 - 通知ブロックは、
PersonProjection.name
プロパティの変更に対して起動されますが、別のプロジェクションのプロパティ変更に対しては起動しません。 確認されたキー パスが
["firstFriendsName"]
の場合、friends
リストのfirstName
の挿入、削除、または変更によってブロックがtriggerされます。someFriend.lastName
への変更ではブロックはtriggerされません(someFriend
はfriends
に含まれる要素です)
注意
個別のキー パスでフィルタリングされる同じオブジェクト上の複数の通知トークンは、排他的にフィルタリングされません。 1 つの通知トークンに対して 1 つのキーパスの変更が満たされた場合、そのオブジェクトのすべての通知トークン ブロックが実行されます。
キューが指定されていない場合、通知は標準の実行ループを介して配信されるため、実行ループが他のアクティビティによってブロックされている間は通知を配信できません。 キューが指定されている場合、代わりにそのキューに通知が配信されます。 通知をすぐに配信できない場合は、複数の通知が 1 つの通知に統合されることがあります。
List
やResults
とは異なり、新しい通知ブロックを追加した後に実行される初期コールバックはありません。アップデートをブロックに送信する場合は、返されたトークンを保持する必要があります。 更新の受信を停止するには、トークンで
invalidate()
を呼び出します。コールバック ブロック内で監視対象オブジェクトへの強力な参照をキャプチャしても安全です。 コールバックはオブジェクト自体ではなく返されたトークンによって保持されるため、保持サイクルがありません。
警告
このメソッドは、書込みトランザクション中、または Realm を含む が読み取り専用の場合に呼び出すことができません。警告
元のプロパティが同じルート プロパティ名を持つプロジェクション プロパティの場合、変更が 1 つのみにのみ対応している場合でも、各プロジェクション プロパティに対して
PropertyChange
がtriggerされます。 次のProjection
オブジェクトの場合、`swift クラスの proper別のプロジェクション: プロジェクション{ @Projected(\Performance.firstName) 変数名 @Projected(\Password.address.country) orgions @Projected(\Performance.hostname.number) mobile } let token = projectedPerson.observe { changes in if case .change(_, let propertyChanges) = changes { propertyChanges[0].newValue as? String, "Winterfell" // Will notify the new value propertyChanges[1].newValue as? String, "555-555-555" // Will notify with the current value, which hasn't change. } }) try realm.write { person.address.country = "Winterfell" } ```
宣言
Swift
public func observe(keyPaths: [String]? = nil, on queue: DispatchQueue? = nil, _ block: @escaping (ObjectChange<Self>) -> Void) -> NotificationToken
パラメーター
keyPaths
キーパス配列に含まれるプロパティのみが変更されたときにブロックをtriggerします。
nil
の場合、オブジェクトにプロジェクションされるプロパティの変更に対して通知が配信されます。 有効なプロジェクション プロパティに対応しないstringキー パスは例外をスローします。queue
通知を受信するシリアル ディスパッチ キュー。
nil
の場合、通知は現在のスレッドに配信されます。block
オブジェクトに対する変更に関する情報を呼び出すブロック。
戻り値
更新を配信する限り保持する必要があるトークン。
- 上記の通知ブロックは、プロジェクションの基礎となる
-
observe(keyPaths:
拡張メソッドon: _: ) プロジェクションの基礎となるオブジェクトが変更されるたびに呼び出されるブロックを登録します。
ブロックは、基礎となるオブジェクトを削除するか、プロパティを既存の値に設定する自己割り当てを含む、オブジェクトのプロジェクションされたプロパティのいずれかを変更する各書込みトランザクションの後に非同期に呼び出されます。
異なるスレッドまたは異なるプロセスで実行される書込みトランザクションの場合、ブロックは管理 Realm が変更を含むバージョンに(自動)更新されたときに呼び出されますが、ローカルの書込みトランザクションでは、将来のある時点で呼び出されます書込みトランザクション (write transaction) がコミットされた場合。
キー パスが指定されていない場合、ブロックは、ネストされたリンクされたオブジェクトのプロジェクションされたプロパティを含む、すべてのプロジェクションされたプロパティの挿入、変更、または削除時に実行されます。 キー パスが指定されている場合、指定されたキー パスでのみ発生する変更に対してブロックが呼び出されます。 たとえば、次の場合:
class Person: Object { @Persisted var firstName: String @Persisted var lastName = "" @Persisted public var friends: List<Person> } class PersonProjection: Projection<Person> { @Projected(\Person.firstName) var name @Projected(\Person.lastName.localizedUppercase) var lastNameCaps @Projected(\Person.friends.projectTo.firstName) var firstFriendsName: ProjectedCollection<String> } let token = projectedPerson.observe(keyPaths: [\PersonProjection.name], { changes in // ... })
- 上記の通知ブロックは、オブジェクトの
firstName
プロパティの変更に対しては起動しますが、lastName
またはfriends
リストに加えられた変更に対しては起動しません。 確認されたキー パスが
[\PersonProjection.firstFriendsName]
の場合、friends
リストのfirstName
の挿入、削除、または変更によってブロックがtriggerされます。someFriend.lastName
への変更ではブロックはtriggerされません(someFriend
はfriends
に含まれる要素です)
注意
個別のキー パスでフィルタリングされる同じオブジェクト上の複数の通知トークンは、排他的にフィルタリングされません。 1 つの通知トークンに対して 1 つのキーパスの変更が満たされた場合、そのオブジェクトのすべての通知トークン ブロックが実行されます。
キューが指定されていない場合、通知は標準の実行ループを介して配信されるため、実行ループが他のアクティビティによってブロックされている間は通知を配信できません。 キューが指定されている場合、代わりにそのキューに通知が配信されます。 通知をすぐに配信できない場合は、複数の通知が 1 つの通知に統合されることがあります。
List
やResults
とは異なり、新しい通知ブロックを追加した後に実行される初期コールバックはありません。アップデートをブロックに送信する場合は、返されたトークンを保持する必要があります。 更新の受信を停止するには、トークンで
invalidate()
を呼び出します。コールバック ブロック内で監視対象オブジェクトへの強力な参照をキャプチャしても安全です。 コールバックはオブジェクト自体ではなく返されたトークンによって保持されるため、保持サイクルがありません。
警告
このメソッドは、書込みトランザクション中、または Realm を含む が読み取り専用の場合に呼び出すことができません。宣言
Swift
public func observe(keyPaths: [PartialKeyPath<Self>], on queue: DispatchQueue? = nil, _ block: @escaping (ObjectChange<Self>) -> Void) -> NotificationToken
パラメーター
keyPaths
キーパス配列に含まれるプロパティのみが変更されたときにブロックをtriggerします。
nil
の場合、オブジェクトにプロジェクションされるプロパティの変更に対して通知が配信されます。 有効なプロジェクション プロパティに対応しないstringキー パスは例外をスローします。queue
通知を受信するシリアル ディスパッチ キュー。
nil
の場合、通知は現在のスレッドに配信されます。block
オブジェクトに対する変更に関する情報を呼び出すブロック。
戻り値
更新を配信する限り保持する必要があるトークン。
- 上記の通知ブロックは、オブジェクトの
-
observe(keyPaths:
拡張メソッド、非同期on: _isolation: _: ) プロジェクションの基礎となるオブジェクトが変更されるたびに呼び出されるブロックを登録します。
ブロックは、基礎となるオブジェクトを削除するか、プロパティを既存の値に設定する自己割り当てを含む、オブジェクトのプロジェクションされるプロパティを変更する各書き込みトランザクションの後にアクター上で非同期に呼び出されます。
異なるスレッドまたは異なるプロセスで実行される書込みトランザクションの場合、ブロックは管理 Realm が変更を含むバージョンに(自動)更新されたときに呼び出されますが、ローカルの書込みトランザクションでは、将来のある時点で呼び出されます書込みトランザクション (write transaction) がコミットされた場合。
キー パスが指定されていない場合、ブロックは、ネストされたリンクされたオブジェクトのプロジェクションされたプロパティを含む、すべてのプロジェクションされたプロパティの挿入、変更、または削除時に実行されます。 キー パスが指定されている場合、指定されたキー パスでのみ発生する変更に対してブロックが呼び出されます。 たとえば、次の場合:
class Person: Object { @Persisted var firstName: String @Persisted var lastName = "" @Persisted public var friends: List<Person> } class PersonProjection: Projection<Person> { @Projected(\Person.firstName) var name @Projected(\Person.lastName.localizedUppercase) var lastNameCaps @Projected(\Person.friends.projectTo.firstName) var firstFriendsName: ProjectedCollection<String> } let token = projectedPerson.observe(keyPaths: ["name"], { changes in // ... })
- 上記の通知ブロックは、プロジェクションの基礎となる
Person
オブジェクトのPerson.firstName
プロパティに対する変更に対して起動しますが、Person.lastName
またはPerson.friends
リストに加えられた変更に対しては起動しません。 - 通知ブロックは、
PersonProjection.name
プロパティの変更に対して起動されますが、別のプロジェクションのプロパティ変更に対しては起動しません。 - 確認されたキー パスが
["firstFriendsName"]
の場合、friends
リストのfirstName
の挿入、削除、または変更によってブロックがtriggerされます。someFriend.lastName
への変更ではブロックはtriggerされません(someFriend
はfriends
に含まれる要素です)
通知は、指定されたアクターの実行プログラム上の、そのアクターに分離された関数に配信されます。 アクターがブロッキング作業を実行している場合、複数の通知が 1 つの通知に統合されることがあります。
コレクション通知とは異なり、「初期」通知はなく、この関数が返されるまでと変更が最初にキャプチャされるまでの間に差はありません。
アップデートをブロックに送信する場合は、返されたトークンを保持する必要があります。 更新の受信を停止するには、トークンで
invalidate()
を呼び出します。警告
このメソッドは、書込みトランザクション中、または Realm を含む が読み取り専用の場合に呼び出すことができません。宣言
Swift
@available(macOS 10.15, tvOS 13.0, iOS 13.0, watchOS 6.0, *) public func observe<A: Actor>( keyPaths: [String]? = nil, on actor: A, _isolation: isolated (any Actor)? = #isolation, _ block: @Sendable @escaping (isolated A, ObjectChange<Self>) -> Void ) async -> NotificationToken
パラメーター
keyPaths
キーパス配列に含まれるプロパティのみが変更されたときにブロックをtriggerします。
nil
の場合、オブジェクトにプロジェクションされるプロパティの変更に対して通知が配信されます。 有効なプロジェクション プロパティに対応しないstringキー パスは例外をスローします。actor
通知を配信するアクター。 The block is passed this actor as an isolated parameter, allowing you to access the actor synchronously from within the callback.
block
オブジェクトに対する変更に関する情報を呼び出すブロック。
戻り値
更新を配信する限り保持する必要があるトークン。
- 上記の通知ブロックは、プロジェクションの基礎となる
-
observe(keyPaths:
拡張メソッド、非同期on: _isolation: _: ) プロジェクションの基礎となるオブジェクトが変更されるたびに呼び出されるブロックを登録します。
ブロックは、基礎となるオブジェクトを削除するか、プロパティを既存の値に設定する自己割り当てを含む、オブジェクトのプロジェクションされるプロパティを変更する各書き込みトランザクションの後にアクター上で非同期に呼び出されます。
異なるスレッドまたは異なるプロセスで実行される書込みトランザクションの場合、ブロックは管理 Realm が変更を含むバージョンに(自動)更新されたときに呼び出されますが、ローカルの書込みトランザクションでは、将来のある時点で呼び出されます書込みトランザクション (write transaction) がコミットされた場合。
キー パスが指定されていない場合、ブロックは、ネストされたリンクされたオブジェクトのプロジェクションされたプロパティを含む、すべてのプロジェクションされたプロパティの挿入、変更、または削除時に実行されます。 キー パスが指定されている場合、指定されたキー パスでのみ発生する変更に対してブロックが呼び出されます。 たとえば、次の場合:
class Person: Object { @Persisted var firstName: String @Persisted var lastName = "" @Persisted public var friends: List<Person> } class PersonProjection: Projection<Person> { @Projected(\Person.firstName) var name @Projected(\Person.lastName.localizedUppercase) var lastNameCaps @Projected(\Person.friends.projectTo.firstName) var firstFriendsName: ProjectedCollection<String> } let token = projectedPerson.observe(keyPaths: [\PersonProjection.name], { changes in // ... })
- 上記の通知ブロックは、プロジェクションの基礎となる
Person
オブジェクトのPerson.firstName
プロパティに対する変更に対して起動しますが、Person.lastName
またはPerson.friends
リストに加えられた変更に対しては起動しません。 - 通知ブロックは、
PersonProjection.name
プロパティの変更に対して起動されますが、別のプロジェクションのプロパティ変更に対しては起動しません。 - 確認されたキー パスが
[\.firstFriendsName]
の場合、friends
リストのfirstName
の挿入、削除、または変更によってブロックがtriggerされます。someFriend.lastName
への変更ではブロックはtriggerされません(someFriend
はfriends
に含まれる要素です)
通知は、指定されたアクターの実行プログラム上の、そのアクターに分離された関数に配信されます。 アクターがブロッキング作業を実行している場合、複数の通知が 1 つの通知に統合されることがあります。
コレクション通知とは異なり、「初期」通知はなく、この関数が返されるまでと変更が最初にキャプチャされるまでの間に差はありません。
アップデートをブロックに送信する場合は、返されたトークンを保持する必要があります。 更新の受信を停止するには、トークンで
invalidate()
を呼び出します。警告
このメソッドは、書込みトランザクション中、または Realm を含む が読み取り専用の場合に呼び出すことができません。宣言
Swift
@available(macOS 10.15, tvOS 13.0, iOS 13.0, watchOS 6.0, *) public func observe<A: Actor>( keyPaths: [PartialKeyPath<Self>], on actor: A, _isolation: isolated (any Actor)? = #isolation, _ block: @Sendable @escaping (isolated A, ObjectChange<Self>) -> Void ) async -> NotificationToken
パラメーター
keyPaths
キーパス配列に含まれるプロパティのみが変更されたときにブロックをtriggerします。
nil
の場合、オブジェクトにプロジェクションされるプロパティの変更に対して通知が配信されます。 有効なプロジェクション プロパティに対応しないstringキー パスは例外をスローします。actor
通知を配信するアクター。 The block is passed this actor as an isolated parameter, allowing you to access the actor synchronously from within the callback.
block
オブジェクトに対する変更に関する情報を呼び出すブロック。
戻り値
更新を配信する限り保持する必要があるトークン。
- 上記の通知ブロックは、プロジェクションの基礎となる