【问题标题】:Pass data from a ViewModel to the other on iOS MVVM将数据从一个 ViewModel 传递到 iOS MVVM 上的另一个
【发布时间】:2019-07-09 17:34:50
【问题描述】:

我是 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)
    }
}

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

【问题讨论】:

    标签: ios mvvm


    【解决方案1】:
    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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-11-25
      • 2021-08-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多