我正在开发一个简单的应用程序来在 iOS 中试用 MVVM。我的应用程序中只有两个屏幕。 Screen A
显示内容,用户可以点击settings
上拉按钮screen B
. Screen B
允许用户更改影响方式的设置screen A
显示内容。
screen B
中所做的更改至screen A
这样screen A
可以根据设置更改重新显示内容吗?在 MVC 中,我将使用协议(protocol)/委托(delegate)来传达在 ViewControllerB
中所做的更改。至ViewControllerA
.由于 View Controller 可以直接访问模型,因此我可以在委托(delegate)调用中传递更新的模型。在 MVVM 中,ViewModelB
之间会发生通信吗?至ViewModelA
或 ViewControllerB
至ViewControllerA
(如 MVC)。 ViewControllerB
是什么?真正传递给 ViewControllerA
? ViewModelA
?如果是这样,不是ViewControllerB
了解ViewModelA
打败减少 View Controller 责任/知识的目的? 感谢您花时间阅读问题!
最佳答案
在这种情况下,我会按如下方式设计数据流:
ViewModelA
和 ViewModelB
与来自模型层的某个实体(来自 MVVM 的第一个 M)进行通信。这些实体经常被称为“服务”并包含持久性/网络逻辑。 ViewControllerB
并更改一些设置,ViewModelB
对模型进行相应的更改。 ViewModelA
观察对同一模型的更改(通过 KVO、NotificationCenter、响应式发布者或良好的旧委托(delegate)模式,任何最适合您的方式)并通过更新 ViewControllerA
对它们使用react如果需要的话。 这样,您的两个 View 模型都不需要相互了解,并且您的模型层就像它们两个的单一事实来源一样。
关于ios - iOS MVVM 中 View Controller 之间的通信,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63888527/