ProjectionChangeset
@frozen
public struct ProjectionChangeset<P> : Publisher where P : ProjectionObservable, P : ThreadConfined
发出 ObjectChange 的发布者
receive(on:)
和subscribe(on:)
可以直接对此发布者调用,并且仅当存在中间转换时才需要调用.threadSafeReference()
。 如果使用subscribe(on:)
,则应始终是管道中的第一个操作。
使用changesetPublisher()
函数创建此发布者。
-
此发布者会发出 ProjectionChange
指示每次在修改观察到的投影的写事务(write transaction)后刷新Realm时哪个投影以及该投影的哪些属性发生了变化。
声明
Swift
public typealias Output = ObjectChange<P>
-
该发布商通过 ProjectionChange 的
.error
案例报告错误。声明
Swift
public typealias Failure = Never
-
捕获通过观察 Realm 集合而生成的
NotificationToken
。这允许您在执行
Realm.write(withoutNotifying:)
时跳过通知。 如果您需要写入 Realm 数据库并忽略此特定观察链,则应使用此调用。NotificationToken
将保存在receive(subscriber:)
中设置的观察块中的指定KeyPath
上。声明
Swift
public func saveToken<T>(on tokenParent: T, at keyPath: WritableKeyPath<T, NotificationToken?>) -> ProjectionChangesetWithToken<T, P>
参数
projection
写入
NotificationToken
的投影。keyPath
写入
NotificationToken
的 KeyPath。返回值
-
指定执行订阅、取消和请求操作的调度程序。
对于 Realm 发布者,这决定了将底层变更通知发送到哪个队列。 如果随后未使用
receive(on:)
,它还将确定对从发布者收到的哪些队列元素进行评估。 目前仅支持串行调度队列,不支持options:
参数。声明
Swift
public func subscribe<S>(on scheduler: S) -> ProjectionChangeset<P> where S : Scheduler
参数
scheduler
要对其执行订阅的串行调度队列。
返回值
在给定调度器上进行订阅的发布者。
-
指定执行下游操作的调度器。
这与
subscribe(on:)
的不同之处在于它与自动刷新周期集成的方式。 使用subscribe(on:)
时,在目标调度器上执行订阅,并且发布者将在刷新期间发出集合。 使用receive(on:)
时,该集合会转换为ThreadSafeReference
并传递到目标计划程序,而不会集成到自动刷新周期中,这意味着它可能会在刷新发生后的某个时间到达。如有疑问,您可能想要
subscribe(on:)
声明
Swift
public func receive<S>(on scheduler: S) -> DeferredHandoverProjectionChangeset<`Self`, P, S> where S : Scheduler
参数
scheduler
用于接收值的串行调度队列。
返回值
向给定调度程序传递值的发布者。