1

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

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

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

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

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

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

4

2 回答 2

1

为什么你仍然需要转换ReplaySubjectObservable

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

于 2019-12-10T07:28:15.337 回答
0

如果你不让 collapsedObservable 成为可选的,那么它永远不会是 nil。

class ViewController: UIViewController {

    private let headerCollapsed = ReplaySubject<Bool>.create(bufferSize: 1)
    lazy var collapsedObservable = headerCollapsed.asObservable()
}
于 2019-12-10T20:48:54.210 回答