出版社

extension Publisher
extension Publisher where Output: ThreadConfined
  • 上流の出版社によって発行されたすべての Realm オブジェクトとコレクションを固定します

    Realm オブジェクトを停止すると、Realm への書込み (write) が行われたときにライブ更新が行われなくなり、 .threadSafeReference()を使用せずにスレッド間を自由に通過できるようになります。

    // Get a publisher for a Results
    let cancellable = myResults.publisher
       // Convert to frozen Results
       .freeze()
       // Unlike live objects, frozen objects can be sent to a concurrent queue
       .receive(on: DispatchQueue.global())
       .sink { frozenResults in
           // Do something with the frozen Results
       }
    

    宣言

    Swift

    public func freeze<T>() -> Publishers.Map<Self, T> where T : ThreadConfined, T == Self.Output

    戻り値

    上流の出版社が公開するオブジェクトの固定されたコピーを公開する出版社。

  • 上流のパウンドが発行するすべての Realm オブジェクトの変更セットを固定します。

    Realm オブジェクト変更セットを固定すると、Realm への書込みが行われたときに、含まれるオブジェクト参照がライブ アップデートされなくなり、 .threadSafeReference()を使用せずにスレッド間を自由に通過できるようになります。 また、変更セットに含まれる固定オブジェクトが常にプロパティの変更と一致することも保証されます。これは、スレッドセーフな参照を使用している場合は必ずしも当てはまません。

    // Get a changeset publisher for an object
    let cancellable = changesetPublisher(object)
       // Convert to frozen changesets
       .freeze()
       // Unlike live objects, frozen objects can be sent to a concurrent queue
       .receive(on: DispatchQueue.global())
       .sink { changeset in
           // Do something with the frozen changeset
       }
    

    宣言

    Swift

    public func freeze<T>() -> Publishers.Map<Self, ObjectChange<T>> where T : RealmSwiftObject, Self.Output == ObjectChange<T>

    戻り値

    上流の出版社が公開する変更セットの固定されたコピーを公開する出版社。

  • すべての Realm コレクションの変更セットを上流のパウンドから固定します。

    Realm コレクションの変更セットを固定すると、Realm への書込み (write) が行われたときに、含まれるコレクション参照がライブ更新されなくなり、 .threadSafeReference()を使用せずにスレッド間を自由に通過できるようになります。 また、変更セットに含まれる固定コレクションが常に変更情報と一致することが保証されます。これは、スレッドセーフな参照を使用している場合は必ずしも当てはまません。

    // Get a changeset publisher for a collection
    let cancellable = myList.changesetPublisher
       // Convert to frozen changesets
       .freeze()
       // Unlike live objects, frozen objects can be sent to a concurrent queue
       .receive(on: DispatchQueue.global())
       .sink { changeset in
           // Do something with the frozen changeset
       }
    

    宣言

    Swift

    public func freeze<T: RealmCollection>()
        -> Publishers.Map<Self, RealmCollectionChange<T>> where Output == RealmCollectionChange<T>

    戻り値

    上流の出版社が公開する変更セットの固定されたコピーを公開する出版社。

  • すべての Realm セクションの結果変更セットを上流のパウンドから固定します。

    Realm でセクション化された結果の変更セットを固定すると、Realm への書き込みが行われたときに、含まれているセクション化された結果参照はライブ更新されなくなり、 .threadSafeReference()を使用せずにスレッド間を自由に通過できるようになります。 また、変更セットに含まれる固定されたセクション化された結果が常に変更情報と一致することが保証されます。これは、スレッドセーフな参照を使用している場合は常に一致するわけではありません。

    // Get a changeset publisher for the sectioned results
    let cancellable = mySectionedResults.changesetPublisher
       // Convert to frozen changesets
       .freeze()
       // Unlike live objects, frozen objects can be sent to a concurrent queue
       .receive(on: DispatchQueue.global())
       .sink { changeset in
           // Do something with the frozen changeset
       }
    

    宣言

    Swift

    public func freeze<T: RealmSectionedResult>()
        -> Publishers.Map<Self, SectionedResultsChange<T>> where Output == SectionedResultsChange<T>

    戻り値

    上流の出版社が公開する変更セットの固定されたコピーを公開する出版社。

  • すべての Realm コレクションの変更セットを上流のパウンドから固定します。

    Realm コレクションの変更セットを固定すると、Realm への書込み (write) が行われたときに、含まれるコレクション参照がライブ更新されなくなり、 .threadSafeReference()を使用せずにスレッド間を自由に通過できるようになります。 また、変更セットに含まれる固定コレクションが常に変更情報と一致することが保証されます。これは、スレッドセーフな参照を使用している場合は必ずしも当てはまません。

    // Get a changeset publisher for a collection
    let cancellable = myMap.changesetPublisher
       // Convert to frozen changesets
       .freeze()
       // Unlike live objects, frozen objects can be sent to a concurrent queue
       .receive(on: DispatchQueue.global())
       .sink { changeset in
           // Do something with the frozen changeset
       }
    

    宣言

    Swift

    public func freeze<T: RealmKeyedCollection>()
        -> Publishers.Map<Self, RealmMapChange<T>> where Output == RealmMapChange<T>

    戻り値

    上流の出版社が公開する変更セットの固定されたコピーを公開する出版社。

  • 上流の出版社によって発行されたすべての Realm プロジェクションの変更セットを固定します。

    Realm プロジェクションの変更セットを固定すると、Realm への書込みが行われたときに、含まれるプロジェクション参照がライブ更新されなくなり、 .threadSafeReference()を使用せずにスレッド間を自由に通過できるようになります。 また、変更セットに含まれる固定化されたプロジェクションが、プロパティの変更に常に一致することが保証されます。これは、スレッドセーフな参照を使用している場合は必ずしも当てはまません。

    // Get a changeset publisher for an projection
    let cancellable = changesetPublisher(projection)
       // Convert to frozen changesets
       .freeze()
       // Unlike live projections, frozen projections can be sent to a concurrent queue
       .receive(on: DispatchQueue.global())
       .sink { changeset in
           // Do something with the frozen changeset
       }
    

    宣言

    Swift

    public func freeze<T: ProjectionObservable>()
    -> Publishers.Map<Self, ObjectChange<T>> where Output == ObjectChange<T>, T: ThreadConfined

    戻り値

    上流の出版社が公開する変更セットの固定されたコピーを公開する出版社。

組み合わせ

  • オブジェクトの変更セットを別のディスパッチ キューに渡すことを有効にします。

    Realm スレッド定義オブジェクトを出力する出版社でreceive(on:)を呼び出すたびに、 .threadSafeReference()への呼び出しが続行される必要があります。 返された出版社は、スレッドによって定義されたオブジェクトを新しいキューに渡すために必要なロジックを処理します。 シリアル ディスパッチ キューのみがサポートされており、他のスケジューラーを使用すると致命的なエラーが発生します。

    たとえば、バックグラウンド スレッドでサブスクライブするには、ここでいくつかの作業を行い、次に オブジェクトの変更セットをメイン スレッドに渡します。これには次のものが含まれます。

    let cancellable = changesetPublisher(myObject)
        .subscribe(on: DispatchQueue(label: "background queue")
        .print()
        .threadSafeReference()
        .receive(on: DispatchQueue.main)
        .sink { objectChange in
            // Do things with the object on the main thread
        }
    

    宣言

    Swift

    public func threadSafeReference<T: Object>()
        -> RealmPublishers.MakeThreadSafeObjectChangeset<Self, T> where Output == ObjectChange<T>

    戻り値

    スレッド定義オブジェクトのreceive(on:)をサポートする出版社。

  • プロジェクションの変更セットを別のディスパッチ キューに渡すことを有効にします。

    Each call to receive(on:) on a publisher which emits Realm thread-confined projection must be proceeded by a call to .threadSafeReference(). 返された パブリッシャー は、スレッド定義されたプロジェクションを新しいキューに渡すために必要なロジックを処理します。 シリアル ディスパッチ キューのみがサポートされており、他のスケジューラーを使用すると致命的なエラーが発生します。

    たとえば、バックグラウンド スレッドでサブスクライブするには、ここでいくつかの作業を行い、プロジェクションの変更セットをメイン スレッドに渡します。これには次のものが含まれます。

    let cancellable = changesetPublisher(myProjection)
        .subscribe(on: DispatchQueue(label: "background queue")
        .print()
        .threadSafeReference()
        .receive(on: DispatchQueue.main)
        .sink { projectionChange in
            // Do things with the projection on the main thread
        }
    

    宣言

    Swift

    public func threadSafeReference<T: ProjectionObservable>()
    -> RealmPublishers.MakeThreadSafeObjectChangeset<Self, T> where Output == ObjectChange<T>, T: ThreadConfined

    戻り値

    スレッド定義オブジェクトのreceive(on:)をサポートする出版社。

  • Realm コレクションの変更セットを別のディスパッチ キューに渡すことを有効にします。

    Realm スレッド定義オブジェクトを出力する出版社でreceive(on:)を呼び出すたびに、 .threadSafeReference()への呼び出しが続行される必要があります。 返された出版社は、スレッドによって定義されたオブジェクトを新しいキューに渡すために必要なロジックを処理します。 シリアル ディスパッチ キューのみがサポートされており、他のスケジューラーを使用すると致命的なエラーが発生します。

    たとえば、バックグラウンド スレッドでサブスクライブするには、ここでいくつかの作業を行い、コレクションの変更セットをメイン スレッドに渡します。これには次のものが含まれます。

    let cancellable = myCollection.changesetPublisher
        .subscribe(on: DispatchQueue(label: "background queue")
        .print()
        .threadSafeReference()
        .receive(on: DispatchQueue.main)
        .sink { collectionChange in
            // Do things with the collection on the main thread
        }
    

    宣言

    Swift

    public func threadSafeReference<T: RealmCollection>()
        -> RealmPublishers.MakeThreadSafeCollectionChangeset<Self, T> where Output == RealmCollectionChange<T>

    戻り値

    スレッド定義オブジェクトのreceive(on:)をサポートする出版社。

  • Realm コレクションの変更セットを別のディスパッチ キューに渡すことを有効にします。

    Realm スレッド定義オブジェクトを出力する出版社でreceive(on:)を呼び出すたびに、 .threadSafeReference()への呼び出しが続行される必要があります。 返された出版社は、スレッドによって定義されたオブジェクトを新しいキューに渡すために必要なロジックを処理します。 シリアル ディスパッチ キューのみがサポートされており、他のスケジューラーを使用すると致命的なエラーが発生します。

    たとえば、バックグラウンド スレッドでサブスクライブするには、ここでいくつかの作業を行い、コレクションの変更セットをメイン スレッドに渡します。これには次のものが含まれます。

    let cancellable = myCollection.changesetPublisher
        .subscribe(on: DispatchQueue(label: "background queue")
        .print()
        .threadSafeReference()
        .receive(on: DispatchQueue.main)
        .sink { collectionChange in
            // Do things with the collection on the main thread
        }
    

    宣言

    Swift

    public func threadSafeReference<T: RealmKeyedCollection>()
        -> RealmPublishers.MakeThreadSafeKeyedCollectionChangeset<Self, T> where Output == RealmMapChange<T>

    戻り値

    スレッド定義オブジェクトのreceive(on:)をサポートする出版社。

  • Realm セクションの結果変更セットを別のディスパッチ キューに渡すことを有効にします。

    Realm スレッド定義オブジェクトを出力する出版社でreceive(on:)を呼び出すたびに、 .threadSafeReference()への呼び出しが続行される必要があります。 返された出版社は、スレッドによって定義されたオブジェクトを新しいキューに渡すために必要なロジックを処理します。 シリアル ディスパッチ キューのみがサポートされており、他のスケジューラーを使用すると致命的なエラーが発生します。

    たとえば、バックグラウンド スレッドでサブスクライブするには、ここでいくつかの作業を行い、コレクションの変更セットをメイン スレッドに渡します。これには次のものが含まれます。

    let cancellable = mySectionedResults.changesetPublisher
        .subscribe(on: DispatchQueue(label: "background queue")
        .print()
        .threadSafeReference()
        .receive(on: DispatchQueue.main)
        .sink { sectionedResultsChange in
            // Do things with the sectioned results on the main thread
        }
    

    宣言

    Swift

    public func threadSafeReference<T: RealmSectionedResult>()
        -> RealmPublishers.MakeThreadSafeSectionedResultsChangeset<Self, T> where Output == SectionedResultsChange<T>

    戻り値

    スレッド定義オブジェクトのreceive(on:)をサポートする出版社。

Output : ThreadConfinedで利用可能

  • スレッド定義されたオブジェクトを別のディスパッチ キューに渡すことを有効にします。

    Realm スレッド定義オブジェクトを出力する出版社でreceive(on:)を呼び出すたびに、 .threadSafeReference()への呼び出しが続行される必要があります。返された パブリッシャーは、スレッド定義オブジェクトを新しいキューに渡すために必要なロジックを処理します。 シリアル ディスパッチ キューのみがサポートされており、他のスケジューラーを使用すると致命的なエラーが発生します。

    たとえば、バックグラウンド スレッドでサブスクライブするには、ここでいくつかの作業を行い、次に オブジェクトをメイン スレッドに渡します。これにより、次のことが可能になります。

    let cancellable = publisher(myObject)
        .subscribe(on: DispatchQueue(label: "background queue")
        .print()
        .threadSafeReference()
        .receive(on: DispatchQueue.main)
        .sink { object in
            // Do things with the object on the main thread
        }
    

    固定されたオブジェクトまたは管理されていないオブジェクトを発行する出版社でこの関数を呼び出す必要はありませんが、許可されています。

    宣言

    Swift

    public func threadSafeReference() -> RealmPublishers.MakeThreadSafe<Self>

    戻り値

    スレッド定義オブジェクトのreceive(on:)をサポートする出版社。