繁体   English   中英

在 iOS 上以 MVVM-C 模式将数据传递到现有视图 model

[英]Passing data to an existing view model in MVVM-C pattern on iOS

我正在开发一个使用CoordinatorMVVM模式的应用程序。

协调器协议如下所示:

protocol Coordinator: class {
    func start()
    func start(with deeplink: DeeplinkOption?)
}

start方法具有启动当前协调器流的逻辑,例如创建相应的初始视图 controller、视图 model 等。

我尝试通过start(with deeplink: DeeplinkOption?)方法向Coordinator协议添加深度链接处理。 问题是我需要将深层链接数据传递给特定协调器中已经存在的视图 model,并且该协调器不持有对目标视图 model 的引用。 例如想象以下堆栈:

  • 应用协调器

  • 聊天协调员

    • 聊天画面
    • 用户详细信息屏幕

用户当前在用户详细信息屏幕上,我需要将深层链接操作传递给聊天屏幕视图 model。 也没有理由从头开始重新创建聊天屏幕,因为它是在start方法中完成的,因为聊天屏幕已经在导航堆栈中。

是否有针对此问题(以及整体协调器模式)的简洁解决方案,而不存储对相应视图 model 的引用?

除了通过协调器将数据传递到视图 model 之外,您还可以在要传递数据的相应视图 model 中添加观察者 观察者将监听数据,一旦你从任何地方调用观察者,数据就会被传递。

总的来说,通过观察者模式可以实现这一点。

您需要为此添加观察者。无需在视图 model 中传递数据。

从任何地方调用观察者是 MVVM 传递数据的最佳模式

观察者模式可用于在这些组件之间传递数据。 可以在 此处找到一个示例(在稍微不同的上下文中)。

它涉及向数据源注册观察者,并在数据源更改时通知这些观察者。 在 Swift 中,您可以使用didSet {... }执行此操作,调用观察者的方法以通知他们数据更改。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM