gpt4 book ai didi

swift - RxSwift PublishSubject 正在处理中

转载 作者:搜寻专家 更新时间:2023-11-01 05:36:00 30 4
gpt4 key购买 nike

我将 Button pressed 绑定(bind)到路由器中的 PublishSubject,如下所示:

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

在我的路由器中:

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

但是,当 Controller 被释放时,按钮会发送“完成”信号。当 PublishSubject 接收到它时,它不会对来自另一个 Controller 的信号使用react(这是可以理解的:它是一个 Observable 保证)。

我想到的唯一解决方案:

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

这看起来很丑陋,有点破坏了响应式(Reactive)界面的想法。我的问题是,有没有办法避免将 Completed 事件传播到 PublishSubject?我可以做一些 Observer 来忽略这些事件吗?

最佳答案

如果拥有 hamburgerButton 的 View Controller 正在被释放,因此 hamburgerButton 也被释放,为什么不希望绑定(bind)到 router.openMenu 也被释放?也许你的问题并不清楚你的 View Controller 层次结构是什么。

此外,在第一个片段中,您不应该在不将绑定(bind)添加到 DisposeBag 的情况下进行绑定(bind),如下所示:

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

关于swift - RxSwift PublishSubject 正在处理中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39902650/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com