简要介绍:实现MVVM-C模式

您可以阅读它或尝试与我们创建一个简单的pp。 我们建议使用后者。

我们已经发布了有关MVVM模式的文章:

MVVM体系结构:分步指南
ViewModel有什么不同。 essays.decode.agency

以及关于使用协调器的一项:

与协调员配合应用流程
向庞大的ViewController告别。 essays.decode.agency

因此,唯一合乎逻辑的下一步就是将两者放在一起,并在一个实际示例中引导您实现MVVM-C模式。 我们将其称为“红色和绿色”应用程序。

基本结构

我们将在语义上将“红色与绿色”应用程序的屏幕分组为单位。 每个单元包括以下组件:

  • 视图
  • ViewController
  • 视图模型
  • ViewModelProtocol

ViewModelProtocol用于进一步封装ViewController和ViewModel之间的通信。

我们的应用程序有一个主屏幕,可以选择红色或绿色。 选择红色将我们带到红色屏幕,绿色将我们带到绿色屏幕。

每个VC通过两个组件初始化:

  • mainView —定义屏幕的可视部分并在其上配置操作
  • viewModel —分离UI部件的逻辑; 在MVVM-C模式中,它还负责与协调器进行通信

让我们深入了解并定义主屏幕。 我们将其称为MainVC:

在LoadNibFromEnum中,您会看到我们使用了自定义函数来调用Nibs:

视图是通过相应的XIB定义的,其中有两个按钮,这些按钮在屏幕上显示,因此可以定义对它们的操作。

ViewModelProtocol定义了可以在VC-VM关系上执行的所有动作。 在这种特定情况下,我们只需要在上述两个按钮上定义动作,因此我们将这样做:

可以以多种方式定义动作,但是出于代码易读性的考虑,我们仅通过块定义动作。

ViewModel可以是符合ViewModelProtocol的类或结构,这意味着在ViewModelProtocol中定义的所有方法或动作也必须在ViewModel中定义。

然后,我们最终可以将视图中的按钮动作与ViewModel中定义的动作连接起来:

我们的MainView是公开的,因此我们可以在viewDidLoad中的按钮上定义所有动作,并将每个动作转发到ViewModel中的块。

这样,ViewController不必知道导航接下来会发生什么,并且无需承担控制UI的责任。