RxSwift:将实际可观察​​对象传递给另一个视图控制器?

RxSwift: Pass actual observable to another view controller?

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

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

和一个将布尔值设置为 true 的函数:

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

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

尽管如此,我的路由器 class collapsedObservable 无论如何都为 nil,而且我无法将其设置为默认值以便稍后在我从 vc2 内部调用它时进行更新。那么,是否有可能像这样传递实际的可观察对象?

为什么还要将 ReplaySubject 转换为 Observable

在我看来你可以只使用 RelayBehaviorRelay 如果你想要初始状态)而不是(不完成,不出错,这正是你需要的) 并将 Relay 直接传递给 vc2.

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

class ViewController: UIViewController {

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