如果协调器不在RxSwift中,则协调器在RxSwift + MVVM +协调器情况下会去哪里?

时间:2019-05-21 16:03:30

标签: ios swift mvvm rx-swift coordinator-pattern

我会尽可能地简短:我们将应用程序完整地启动为RxSwift,但协调员开始不堪维护和扩展,因此我们对其进行了重新设计以不使用RxSwift,现在我们不知道该如何使用它们以及存放它们的位置。

最简单的示例:带有1个按钮的视图控制器,视图模型,协调器。 我在哪里叫coordinator.navigate(to: .mySection),怎么称呼?应该将协调器保留在视图控制器中吗?我认为应该将它们保留在视图模型中,但不建议在视图模型中订阅。

我不想为此过度设计,但是希望获得一些有见地的帮助。

3 个答案:

答案 0 :(得分:2)

没有一个MVVM元素可以直接解决Coordinators,因此,如果您使用Soroush的Coordinator模式的好处,则可能正在使用VIPER,但您可能没有意识到这一点,这并不是很重要。

在VIPER中,R代表 Routing (路由),它完全符合协调器的定义。

我真正想建议的两件事是:

  1. Internet上大多数的花言巧语都教您为每个UIViewController BUT 创建一个单独的协调器,我亲自向soroush询问,他回答:这不是最好的与协调员一起练习。因此,我在最新的App中仅使用了两个协调器,并对结果感到非常满意。
  2. 如果您想花一些时间在VIPER上,建议您将ViewControllers用作VIPER模型中的Presentor。我在互联网上看到过一些VIPER教程,它们另有说明。

P.S。 MVVM很棒,但它不可扩展,我建议您看一下VIPER。这是a good article,您可能会觉得有用。

答案 1 :(得分:0)

如果要将协调器用作ViewModel的依赖项,请签出以下库:Action

Action使您可以将按钮与ViewModel绑定在一起。您只需在ViewModel中定义一个动作,然后将其绑定到视图中即可。动作类型只是一个序列,它接受其他序列作为输入并返回另一个序列作为输出。因此,您无需在ViewModel上使用DisposeBag。

如果您想查看示例,请查看Action的GitHub项目,或者,如果您想在应用示例中查看,Ray Wenderlich RxSwift书中有一个漂亮的示例,说明如何集成MVVM和协调器。

答案 2 :(得分:0)

我建议使用XCoordinator及其建议的架构MVVM-C,我已经在2个大型/复杂应用程序中使用过,这很容易。