出版社

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 : Object, 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 への書込み (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 スレッド定義オブジェクトを出力する出版社で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:)をサポートする出版社。

  • 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:)をサポートする出版社。

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:)をサポートする出版社。