2

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

协调器协议如下所示:

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

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

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

  • 应用协调器

  • 聊天协调员

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

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

对于这个问题(以及整个协调器模式)是否有一个巧妙的解决方案,而不存储对相应视图模型的引用?

4

3 回答 3

2

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

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

于 2019-10-23T12:14:30.387 回答
1

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

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

于 2019-10-23T13:40:28.513 回答
0

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

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

于 2019-10-22T07:13:01.543 回答