Swift中的MVVM模式
我有一个关于MVVM的概念问题。我在swift 3中学习这个模式 这就是我的情况: 我有一个带有用户列表的屏幕。UserViewModel有一个属性,它是用户列表,但控制器不应该知道用户模型。我读到控制器不应该对模型一无所知Swift中的MVVM模式,swift,mvvm,Swift,Mvvm,我有一个关于MVVM的概念问题。我在swift 3中学习这个模式 这就是我的情况: 我有一个带有用户列表的屏幕。UserViewModel有一个属性,它是用户列表,但控制器不应该知道用户模型。我读到控制器不应该对模型一无所知 如果控制器向该列表的用户请求数据,则该数据必须是数据字典,或者可以是用户模型 那么,UserViewModel还必须包含与用户模型相同的属性 谢谢你的帮助 如果控制器向该列表的用户请求数据,则该数据必须是数据字典,或者可以是用户模型 数据可以是UserModel 那么,Us
UserModel
那么,UserViewModel还必须包含与用户模型相同的属性
嗯。当然不是。为什么UserViewModel
应该具有与UserModel
相同的属性?没有任何理由
当您需要将一些userModel.name
属性返回控制器时,您可以而且应该仅从userModel
的属性获取此属性,即从ViewModel
获取正确的userModel
,然后获取属性:
func controllerFunc() {
let userModel = viewModel.getUserModelFromList()
print(userModel.name)
}
但当您需要为控制器准备值时,可以在ViewModel
中创建属性,该属性包含对UserModel
属性的某种修改。控制器应该从ViewModel
获取属性,而不是从UserModel
获取属性
我读到控制器不应该对模型一无所知
嗯,理想情况下——是的。另外,应该提到的是,ViewModel
不应该知道任何关于UI组件的信息,即ViewModel
不应该有import-UIKIt
语句
例如,如果需要UIImage
,则应从ViewModel
返回图像的名称(String
type),并在控制器中创建UIImage
对象
如果控制器向该列表的用户请求数据,则该数据必须是数据字典,或者可以是用户模型
数据可以是UserModel
那么,UserViewModel还必须包含与用户模型相同的属性
嗯。当然不是。为什么UserViewModel
应该具有与UserModel
相同的属性?没有任何理由
当您需要将一些userModel.name
属性返回控制器时,您可以而且应该仅从userModel
的属性获取此属性,即从ViewModel
获取正确的userModel
,然后获取属性:
func controllerFunc() {
let userModel = viewModel.getUserModelFromList()
print(userModel.name)
}
但当您需要为控制器准备值时,可以在ViewModel
中创建属性,该属性包含对UserModel
属性的某种修改。控制器应该从ViewModel
获取属性,而不是从UserModel
获取属性
我读到控制器不应该对模型一无所知
嗯,理想情况下——是的。另外,应该提到的是,ViewModel
不应该知道任何关于UI组件的信息,即ViewModel
不应该有import-UIKIt
语句
例如,如果您需要
UIImage
,您应该从ViewModel
返回图像的名称(String
type),并在控制器中创建UIImage
对象。谢谢您的回答。关于属性的问题,我这么想是因为如果控制器不应该知道模型,我需要一些东西来存储属性,我遵循了本教程。还有一件事。如果viewmodel必须处理图像,那么我们不能使用UIImage,因为它在UIKit中,对吗?我应该使用数据吗?@AlbertoGarcíaVallbona,我更新了你所有新问题的答案。谢谢你的详细解释@pacification:)@AlbertoGarcíaVallbona,没问题)谢谢你的回答。关于属性的问题,我这么想是因为如果控制器不应该知道模型,我需要一些东西来存储属性,我遵循了本教程。还有一件事。如果viewmodel必须处理图像,那么我们不能使用UIImage,因为它在UIKit中,对吗?我应该使用数据吗?@AlbertoGarcíaVallbona,我更新了你所有新问题的答案。谢谢你的详细解释@pacification:)@AlbertoGarcíaVallbona,没问题)