在MVVM和RxSwift中围绕ViewControllers传递数据

时间:2017-11-04 03:12:25

标签: ios swift mvvm

我有来自不同视图控制器的数据(每个视图控制器都有一个单独的视图模型),并显示在主视图控制器中。如何使用RxSwift和MVVM实现一个视图控制器与主视图控制器之间的数据传递?

2 个答案:

答案 0 :(得分:2)

我告诫我的回答是因为我无法代表RxSwift。我建议您让两个ViewModel与应用程序的模型或其他控制器进行交互,以协调它们之间的数据。请记住,您希望能够独立于任何其他ViewController为每个ViewController类编写测试(至少从数据的角度来看 - 视图堆栈是另一回事)。并且您的ViewController测试应该允许您交换模拟ViewModel。并且您希望能够独立于任何ViewController或任何其他ViewModel测试每个ViewModel。

因此,最好的办法是让您的风险投资人员简单地与他们的ViewModel进行合约谈话。每个ViewModel也可以与外部模型和控制器交谈。服务 - 最好是允许依赖注入的方式,这样你就可以模拟那些控制器和放大器。测试ViewModel时的服务。

通过在架构设计时始终牢记测试需求,您可以快速推断出正确的内容。

答案 1 :(得分:1)

将Navigator对象注入ViewControllers。此对象应提供在给定所需数据参数的情况下导航到每个ViewController的函数。例如:

  func showSceneX(param1: String, param2: Int, sender: UIViewController) {
     let vm = SomeViewModel(param1: param1, param2: param2)
     let vc = SomeViewController.createWith(navigator: self, viewModel: vm)
     // Show the desired view controller. from the previous one
     sender.present(target, animated: true, completion: nil)
  }

通过将此逻辑隔离到专用对象中,您可以从视图控制器中获得更大的灵活性,并且可以根据需要为包含多个ViewControllers的测试设置模拟。