我愿意重播Completable
的最后结果,我相信酷似.cache()
operator described here什么。
下面RxSwift代码输出:“已完成”
let connectable = Completable.empty().asObservable().replay(1)
connectable.subscribe(onCompleted: { print("completed") })
connectable.connect()
现在,如果我.connect()
我.subscribe()
之前,我没有得到任何东西:
let connectable = Completable.empty().asObservable().replay(1)
connectable.connect()
connectable.subscribe(onCompleted: { print("completed") })
就我而言,如果我.subscribe()
connectable
完成后,我想知道,它已经完成...
有没有办法做到这一点?
如果你不关心的可能性连接,但只是希望有一个缓存行为,没有为cache
运营商一个非常简单的实现:
extension PrimitiveSequence where TraitType == CompletableTrait, ElementType == Swift.Never {
public func cache() -> Observable<ElementType> {
return self.asObservable().share(replay: 1, scope: .forever)
}
}
如果,另一方面,你照顾你观察到的连接性,对于上述重播运营商look at the source code为您提供所需的行为的实现:
extension PrimitiveSequence where TraitType == CompletableTrait, ElementType == Swift.Never {
public func cache() -> ConnectableObservable<ElementType> {
return self.asObservable().multicast(ReplaySubject.create(bufferSize: 1))
}
}
组播是一个棘手的运营商。
它采用事件从源头上观察到的(个体经营)并将其发送给它传递的主题。然后,将这个问题的价值观转发给任何用户。
订阅到源可观察到的,只有当从多播的结果被连接到,通过connect
呼叫发生。
在本用途的情况下,因为ReplaySubject行为类似于高速缓存,多播的这种用法使得任何进一步的用户接收由源emmited的值。