Observable 不接收事件
Observable doesn't receives events
我的代码如下所示:
private let myPublishSubject = PublishSubject<Bool>()
func method(input: String) -> String {
if input == something {
myPublishSubject.onNext(true)
return update(input)
}
myPublishSubject.onNext(false)
return input
}
// Output
let driver: Driver<String>
init() {
let myObservable = Observable.just("a")
driver = Observable.combineLatest(myObservable, myPublishSubject)
.map {
...
}
.asDriver()
}
现在,在调试中,我发现 driver
仅订阅和处理。当 method
后来调用时, myPublishSubject.onNext
没有任何订阅者。
我该如何解决?
@Aks 昨天回答正确:PublishSubject
事件一到就流式传输,无需等待任何订阅者。因此,当事件被触发并且未订阅驱动程序时,我丢失了该事件。
因此,我改为使用 BehaviorRelay
,它解决了我的问题当订阅 BehaviorRelay
时,即使事件发生在订阅者创建之前,你也会得到最后一个流。
我的代码如下所示:
private let myPublishSubject = PublishSubject<Bool>()
func method(input: String) -> String {
if input == something {
myPublishSubject.onNext(true)
return update(input)
}
myPublishSubject.onNext(false)
return input
}
// Output
let driver: Driver<String>
init() {
let myObservable = Observable.just("a")
driver = Observable.combineLatest(myObservable, myPublishSubject)
.map {
...
}
.asDriver()
}
现在,在调试中,我发现 driver
仅订阅和处理。当 method
后来调用时, myPublishSubject.onNext
没有任何订阅者。
我该如何解决?
@Aks 昨天回答正确:PublishSubject
事件一到就流式传输,无需等待任何订阅者。因此,当事件被触发并且未订阅驱动程序时,我丢失了该事件。
因此,我改为使用 BehaviorRelay
,它解决了我的问题当订阅 BehaviorRelay
时,即使事件发生在订阅者创建之前,你也会得到最后一个流。