Swift中的MVVM模式

时间:2017-08-28 11:00:14

标签: swift mvvm

我有一个关于MVVM的概念问题。我正在快速学习这种模式。

这是我的情况: 我有一个包含用户列表的屏幕。 UserViewModel具有一个属性列表,但控制器不应该知道用户模型。我读到控制器不应该完全了解模型。

  1. 如果控制器向此列表的用户请求数据,该数据必须是数据字典还是用户模型?

  2. 然后,UserViewModel还必须包含与用户模型相同的属性吗?

  3. 感谢您的帮助。

1 个答案:

答案 0 :(得分:2)

  

如果控制器向此列表的用户请求数据,则此数据必须是数据字典,还是用户模型?

数据可以是UserModel

  

然后,UserViewModel还必须包含与User模型相同的属性?

HHM。当然不是。为什么UserViewModel应具有UserModel具有的相同属性?没有任何理由。

出于需要将某些userModel.name属性返回给控制器的目的,您可以而且应该仅从UserModel的属性获取此属性,即从{{1}获取正确的UserModel而不是得到财产:

ViewModel

但是,如果您需要为控制器准备值,可以在func controllerFunc() { let userModel = viewModel.getUserModelFromList() print(userModel.name) } 中创建属性,其中包含对ViewModel属性的某种修改。控制器应从UserModel获取属性,而不是从ViewModel获取属性。

  

我读到控制器不应该完全了解模型。

嗯,理想情况下 - 是的。另外,应该提到UserModel不应该对UI组件有任何了解,即ViewModel不应该有ViewModel语句。

例如,如果您需要import UIKIt,则应从UIImage返回图像的名称(String类型),并在控制器中创建ViewModel对象。