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
?
在我看来你可以只使用 Relay
(BehaviorRelay
如果你想要初始状态)而不是(不完成,不出错,这正是你需要的) 并将 Relay
直接传递给 vc2.
如果您不将 collapsedObservable 设为可选,那么它永远不会为 nil。
class ViewController: UIViewController {
private let headerCollapsed = ReplaySubject<Bool>.create(bufferSize: 1)
lazy var collapsedObservable = headerCollapsed.asObservable()
}
我有一个视图控制器需要了解从另一个视图控制器设置的布尔变量 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
?
在我看来你可以只使用 Relay
(BehaviorRelay
如果你想要初始状态)而不是(不完成,不出错,这正是你需要的) 并将 Relay
直接传递给 vc2.
如果您不将 collapsedObservable 设为可选,那么它永远不会为 nil。
class ViewController: UIViewController {
private let headerCollapsed = ReplaySubject<Bool>.create(bufferSize: 1)
lazy var collapsedObservable = headerCollapsed.asObservable()
}