我有一个视图控制器,它需要知道从另一个视图控制器设置的布尔变量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()
}