发布者

extension Publisher
extension Publisher where Output: ThreadConfined
  • 冻结由上游发布者发出的所有 Realm 对象和 collection

    冻结 Realm 对象会使其在写入 Realm 时不再进行实时更新,并且可以在不使用.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 collection 变更集。

    冻结 Realm collection 变更集会使包含的 collection 引用在写入 Realm 时不再实时更新,并且可以在不使用.threadSafeReference()的情况下在线程之间安全地自由传递。它还保证变更集中包含的冻结collection将始终与变更信息匹配,而使用线程安全引用时并非总是如此。

    // 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 collection 变更集。

    冻结 Realm collection 变更集会使包含的 collection 引用在写入 Realm 时不再实时更新,并且可以在不使用.threadSafeReference()的情况下在线程之间安全地自由传递。它还保证变更集中包含的冻结collection将始终与变更信息匹配,而使用线程安全引用时并非总是如此。

    // 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:)的发布者。

  • 允许将投影变更集传递到不同的调度队列。

    每次在发出 Realm 线程限制投影的发布者上调用receive(on:)之前,都必须调用.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:)的发布者。

适用于以下位置: OutputThreadConfined

  • 允许将具有线程限制的对象传递到不同的调度队列。

    每次在发出 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:)的发布者。