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 RTP 实时音频接收

    ios - 启用位码 - 为 iOS 9 做准备(xcode7 beta,支持 iOS 6)

    ios - swift 使 UIBarButtonItem 透明

    WPF RadioButton 更改未更新 UI MVVM

    wpf - 鼠标绑定(bind)鼠标滚轮以放大 WPF 和 MVVM

    c# - WPF 文本 block 不会在运行时显示属性更改

    wpf - DesignInstance 在 VS2012 中不起作用

    c# - value.(entityname) 取的值是多少?

    ios - 无效参数不满足 : nibNameMap ! = nil

    ios - 实现 textViewDidChange :