ios - iOS MVVM 中 View Controller 之间的通信

标签 ios mvvm

我正在开发一个简单的应用程序来在 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 之间会发生通信吗?至ViewModelAViewControllerBViewControllerA (如 MVC)。
  • 如果 View Controller 之间发生通信,ViewControllerB 是什么?真正传递给 ViewControllerA ? ViewModelA ?如果是这样,不是ViewControllerB了解ViewModelA打败减少 View Controller 责任/知识的目的?

  • 感谢您花时间阅读问题!

    最佳答案

    在这种情况下,我会按如下方式设计数据流:

  • 两个ViewModelAViewModelB与来自模型层的某个实体(来自 MVVM 的第一个 M)进行通信。这些实体经常被称为“服务”并包含持久性/网络逻辑。
  • 当用户打开ViewControllerB并更改一些设置,ViewModelB对模型进行相应的更改。
  • ViewModelA观察对同一模型的更改(通过 KVO、NotificationCenter、响应式发布者或良好的旧委托(delegate)模式,任何最适合您的方式)并通过更新 ViewControllerA 对它们使用react如果需要的话。

  • 这样,您的两个 View 模型都不需要相互了解,并且您的模型层就像它们两个的单一事实来源一样。

    关于ios - iOS MVVM 中 View Controller 之间的通信,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63888527/

    相关文章:

    ios - 即使在推送 segue 时声明不同,同一类的对象也具有相同的属性

    ios - 将应用程序提交到 iTunes Connect 时排除 iPod

    c# - 在 ViewModel SelectedItem 中实现 iNotifypropertychanged 后,在 listview 上不起作用

    c# - 在哪里保存我想在多个 ViewModel 之间共享的对象实例

    wpf - 如何使用 mvvm 在 wpf 中的按钮上显示图像和内容

    c# - 将用户控件的子属性直接公开为用户控件的属性

    asp.net-mvc - ASP.NET 中的 Dapper、ODATA 和 IQueryable

    iOS Sprite Kit SKShapeNode 不填满整个路径

    ios - 是否有检查 "All elements of an array contains [NSNULL null]"类型对象的内置函数?

    ios - UICollectionViewCell 中的 UILabel