简要介绍:实现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的责任。