首页 文章

RxSwift PublishSubject正在处理中

提问于
浏览
2

我将按钮绑定到 PublishSubject 的路由器如下:

hambugerButton
   .rx_tap
   .bindTo(router.openMenu)
   .addDisposableTo(disposeBag)

在我的路由器中:

let openMenu = PublishSubject<Void>()
//...
openMenu
   .map { _ in
       menuNavigationController
    }
    .bindTo(mainNavigationController.rx_present())
    .addDisposableTo(disposeBag)

但是,当控制器被取消分配时,按钮正在发送'complete'信号 . 当 PublishSubject 收到它时,它不会对来自另一个控制器的信号作出反应(这是可以理解的:它是 Observable 保证) .

我提出的唯一解决方案:

hambugerButton
    .rx_tap
    .subscribeNext {
        self.router.openMenu.onNext()
    }
    .addDisposableTo(disposeBag)

看起来很丑陋,有点破坏了反应界面的想法 . 我的问题是,有没有办法避免 Completed 事件传播到 PublishSubject ?我可以制作一些忽略此类事件的 Observer 吗?

1 回答

  • 0

    如果正在释放拥有 hamburgerButton 的视图控制器,因此 hamburgerButton 也被取消分配,为什么不希望对 router.openMenu 的绑定也被解除分配?可能不清楚您的视图控制器层次结构来自您的问题 .

    此外,在第一个片段中,如果不将其添加到_1848506中,则不应进行绑定,如下所示:

    hambugerButton
       .rx_tap
       .bindTo(router.openMenu)
       .addDisposableTo(disposeBag)
    

相关问题