0
我綁定按鈕按壓以PublishSubject
在路由器中,像這樣:RxSwift 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
這會忽略這樣的事件嗎?
是啊,謝謝,我只是沒有複製disposeBag。 我不希望它被解除分配,因爲路由器是一個全局對象,而另一個控制器可以/將會綁定它。一些refCount的東西可能在這裏很有用。 – charlag
我明白你現在在說什麼。這是一個很好的問題,我不確定是否有更好的方法去做,而不僅僅是像現在這樣調用onNext。我不知道有什麼方法來壓制Completed事件,但現在你讓我思考了;)但是,我認爲它首先會引起你是否應該試圖擺脫這個問題。那個,單身經常是要避免的事情。 – solidcell