RxSwift:将实际可观察的内容传递给另一个视图控制器?



我有一个视图控制器,它需要知道从另一个视图控制器设置的布尔变量headerCollapsed。在 vc1 中,我有:

headerCollapsed = ReplaySubject<Bool>.create(bufferSize: 1)
collapsedObservable = headerCollapsed.asObservable()

以及将布尔值设置为 true 的函数:

func updateHeader() {
self.headerCollapsed.onNext(true)
}

然后,为了避免创建进一步的依赖项并直接调用 vc1,我尝试通过依赖注入和路由器将 collapsedObservable,而不是 headerCollapsed,一直传递到 vc2。我正在尝试简化问题,但实际上 vc1 和 vc2 之间有几层。

但是正在发生的事情是,在我的路由器类中,无论如何折叠可观察性都是零,并且我无法将其设置为默认值,以便稍后从vc2内部调用它时进行更新。那么,像这样传递实际的可观察性甚至可能吗?

为什么无论如何都需要将ReplaySubject转换为Observable

在我看来,您可以只使用Relay(如果您想要初始状态,BehaviorRelay(代替(未完成,不会出错,这正是您所需要的(,然后将Relay直接传递给 vc2。

如果您不将 collapsedObservable 设置为可选,那么它永远不会为零。

class ViewController: UIViewController {
private let headerCollapsed = ReplaySubject<Bool>.create(bufferSize: 1)
lazy var collapsedObservable = headerCollapsed.asObservable()
}

相关内容

  • 没有找到相关文章

最新更新