RxSwift PublishSubject正在处理中

时间:2016-10-06 17:54:09

标签: swift rx-swift reactivex

我将按钮绑定到路由器中的PublishSubject,如下所示:

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

在我的路由器中:

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

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

我提出的唯一解决方案:

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

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

1 个答案:

答案 0 :(得分:0)

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

另外,在第一个代码段中,如果不将其添加到DisposeBag,则不应该进行绑定:

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