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

Posted

技术标签:

【中文标题】RxSwift:将实际可观察​​对象传递给另一个视图控制器?【英文标题】:RxSwift: Pass actual observable to another view controller? 【发布时间】:2019-12-10 03:51:59 【问题描述】:

我有一个视图控制器,它需要了解从另一个视图控制器设置的布尔变量 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 是零,并且我无法将其设置为稍后从vc2 中调用它时更新的默认值。那么,像这样传递实际的 observable 是否可能?

【问题讨论】:

【参考方案1】:

为什么还需要将ReplaySubject 转换为Observable

在我看来,您可以只使用Relay(如果您想要初始状态,则使用BehaviorRelay)(不完整,不会出错,这正是您所需要的),只需传递@ 987654325@直接转vc2。

【讨论】:

【参考方案2】:

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

class ViewController: UIViewController 

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

【讨论】:

以上是关于RxSwift:将实际可观察​​对象传递给另一个视图控制器?的主要内容,如果未能解决你的问题,请参考以下文章

如何将库类或对象传递给片段?

RxSwift:嵌套可观察对象上的 FlatMap

地图中的 RxSwift 多个可观察对象

将 parcelable 对象传递给新活动返回 null

RxSwift:返回一个带有错误的新可观察对象

RxSwift:结合不同类型的可观察对象和映射结果