【问题标题】:Passing data to an existing view model in MVVM-C pattern on iOS在 iOS 上以 MVVM-C 模式将数据传递给现有视图模型
【发布时间】:2020-02-08 11:28:30
【问题描述】:

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

协调器协议如下:

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

start 方法具有启动当前协调器流的逻辑,例如创建对应的初始视图控制器、视图模型等

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

  • appCoordinator

  • 聊天协调员

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

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

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

【问题讨论】:

  • Coordinator 和 MVVM 对几乎每个使用它的人来说意味着一些不同的东西。你能解释一下在你的应用程序的单个模块中,什么拥有对每种类型对象的引用以及单个模块是如何实例化的?

标签: ios mvvm coordinator-pattern


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

    Observer Pattern 可用于在这些组件之间传递数据。可以在here 找到一个示例(在稍微不同的上下文中)。

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

    【讨论】:

      【解决方案3】:

      您可以在要传递数据的相应视图模型中添加一个观察者,而不是通过 Coordinator 将数据传递给视图模型。观察者将监听数据,一旦你从任何地方调用观察者,数据就会被传递。

      整体通过观察者模式可以实现。

      【讨论】:

        猜你喜欢
        • 2011-01-22
        • 1970-01-01
        • 1970-01-01
        • 2017-10-04
        • 1970-01-01
        • 1970-01-01
        • 2012-04-06
        • 2011-02-20
        • 1970-01-01
        相关资源
        最近更新 更多