Swift中的MVVM模式

Swift中的MVVM模式,swift,mvvm,Swift,Mvvm,我有一个关于MVVM的概念问题。我在swift 3中学习这个模式 这就是我的情况: 我有一个带有用户列表的屏幕。UserViewModel有一个属性,它是用户列表,但控制器不应该知道用户模型。我读到控制器不应该对模型一无所知 如果控制器向该列表的用户请求数据,则该数据必须是数据字典,或者可以是用户模型 那么,UserViewModel还必须包含与用户模型相同的属性 谢谢你的帮助 如果控制器向该列表的用户请求数据,则该数据必须是数据字典,或者可以是用户模型 数据可以是UserModel 那么,Us

我有一个关于MVVM的概念问题。我在swift 3中学习这个模式

这就是我的情况: 我有一个带有用户列表的屏幕。UserViewModel有一个属性,它是用户列表,但控制器不应该知道用户模型。我读到控制器不应该对模型一无所知

  • 如果控制器向该列表的用户请求数据,则该数据必须是数据字典,或者可以是用户模型

  • 那么,UserViewModel还必须包含与用户模型相同的属性

  • 谢谢你的帮助

    如果控制器向该列表的用户请求数据,则该数据必须是数据字典,或者可以是用户模型

    数据可以是
    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,没问题)