将数据从ViewModel传递到iOS MVVM上的另一个

时间:2019-02-15 14:40:49

标签: ios mvvm

我是MVVM的新手,因此在实现一个简单应用程序时遇到一些问题。假设我有一个屏幕OrderViewController

class OrderViewController: UIViewController {
    var viewModel = OrderViewModel()
}

class OrderViewModel {
    var order = Order()
}

我有另一个屏幕ProductsViewController,可以从OrderViewController打开:

class ProductsViewController: UIViewController {
    var viewModel = ProductsViewModel()
}

class ProductsViewModel {
    var order: Order?
}

ProductsViewModel内部的某些逻辑取决于order模型,因此我必须将orderOrderViewModel传递到ProductsViewModel。如何在不破坏MVVM的情况下做到这一点?如果我只是这样做:

class OrderViewController: UIViewController {
    var viewModel = OrderViewModel()

    func showProductsViewController() {
        let vc = ProductsViewController()
        vc.viewModel.order = self.viewModel.order
        self.navigationController?.pushViewController(vc)
    }
}

那是错误的,因为我是从视图(order)引用模型(OrderViewController)的吗?

1 个答案:

答案 0 :(得分:0)

class ProductsViewModel {
    var order: Order?

    init(order : Order) {
        self.order = order
    }
}

class ProductViewController {
     var viewModel : Product?
     init(viewModel : Order) {
         self.viewModel = ProductsViewModel(order : viewModel)
     }
}

并将其命名为

func showProductsViewController() {
    let vc = ProductsViewController(viewModel : order)
    self.navigationController?.pushViewController(vc)
}

为什么?

这是因为在MVVM中,每个viewModel都绑定到单个ViewController。 ProductViewModelProductViewControllerOrderViewModelOrderViewController。 ViewController不应该知道必须将哪些数据传递给其他ViewController。

所有答案都是here