【问题标题】:Observable doesn't receives eventsObservable 不接收事件
【发布时间】:2023-03-08 00:56:01
【问题描述】:

我的代码如下所示:

 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 没有任何订阅者。 我该如何解决?

【问题讨论】:

  • PublishSubject 在事件发生后立即流式传输,无需等待任何订阅者。因此,当触发事件并且未订阅驱动程序时,您将丢失该事件。查看 RxMarble 图了解更多信息:- reactivex.io/documentation/subject.html

标签: ios observable rx-swift object-lifetime combinelatest


【解决方案1】:

@Aks 昨天回答正确:PublishSubject 无需等待任何订阅者即可立即流式传输事件。因此,当触发事件并且未订阅驱动程序时,我丢失了该事件。 因此我改用BehaviorRelay,它解决了我的问题订阅BehaviorRelay时,即使事件发生在订阅者创建之前,您也会获得最后一个流。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-02
    • 1970-01-01
    • 1970-01-01
    • 2011-08-12
    • 1970-01-01
    相关资源
    最近更新 更多