将数据传回 MVVM

Posted

技术标签:

【中文标题】将数据传回 MVVM【英文标题】:Pass Data Back in MVVM 【发布时间】:2015-11-27 20:27:23 【问题描述】:

我尝试在 CoreLocation/MapKit 项目中实现 MVVM。我的主视图控制器仅从其他类(视图模型)派生数据并显示它们。在视图控制器中没有进行任何思考。

CoreLocation 和 MapKit 委托方法都在单独的类中完成,它们在应用启动时将数据传递给视图控制器。

应用启动后,模型类会在用户启动流程时准备要在地图上绘制的路径。即使成功确定了路径,也不会绘制路径,因为我无法将数据从模型传递回视图模型(MapKit 类)。

即使我可以传递数据,视图控制器在应用启动时已经创建了地图视图,现在它需要重新绘制它。

那么如何将数据从模型传回视图模型并重绘我的地图视图?

附:我选择的编码是 Swift

【问题讨论】:

您可以在视图模型中使用委托或 NSNotification,但 IMO MVVM 模式在 ios 上并不真正适用,因为没有 UIBinding。 MVVM 在有 UIBinding 框架的 Windows 中很流行。 @Paulw11 猜你是对的。我开始有同样的感觉。 MVVM 在 iOS 上并不真正适用。谢谢你让我清醒。你也考虑写你的评论作为答案吗? 【参考方案1】:

您可以使用委托模式来通知委托类模型已更改,也可以使用NSNotification。如果多个观察者需要了解更新,后者会更好。

然而,在我看来,MVVM 模式在 iOS 上并不真正适用,因为它不支持 UI 数据绑定,所以 View-Model 并没有真正为您带来任何好处,只是增加了复杂性。 MVVM 起源于有 UI 数据绑定框架的 Windows 世界。

【讨论】:

以上是关于将数据传回 MVVM的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 `navigateBack` 将数据传回上一页?

如何传回数据[重复]

将一些数据传回 RootViewController iOS 7

将数据从 detailViewController 传回 UITableView

带有 Kotlin 的 Android - 将数据传回之前的 Activity

使用委托将数据传回导航堆栈