我是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
模型,因此我必须将order
从OrderViewModel
传递到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
)的吗?
答案 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。 ProductViewModel
至ProductViewController
,OrderViewModel
至OrderViewController
。 ViewController不应该知道必须将哪些数据传递给其他ViewController。
所有答案都是here