具有MVC模式的旧版Objective C代码是否可以与RxSwift共存?

时间:2019-06-14 09:41:32

标签: ios objective-c swift rx-swift

我们有一个应用程序,它具有遵循MVC模式用Objective C编写的庞大代码库。 现在,我们计划使用RxSwift(带有MVVM模式)向现有应用添加新功能/屏幕。这是推荐的方法吗?这两者之间的互操作性有多好?

我们也正在考虑将整个代码库分阶段迁移到RxSwift。我是RxSwift的新手。如果其他人毫无问题地做到了这一点,我将无法获得任何帮助。只是想知道我们在此过程中可能遇到什么样的问题,以及在这里需要做出什么样的努力。

是否可以在RxSwift中调用obj c函数,反之亦然?

1 个答案:

答案 0 :(得分:1)

RxSwift和MVVM本身未指定如何控制屏幕之间的过渡。最常见的方法似乎是使用 FlowControllers 。这是一个很好的read,可以用来熟悉这个概念。

重要的结论是 FlowControllers 可以用于任何屏幕方法,无论是MVC还是MVVM / RxSwift。 但是,假设您的MVC屏幕(即viewController和/或情节提要的segue)不保留对其他屏幕的依赖(通过segue或view controller推送/弹出以及类似的东西)。如果您最想混合使用MVC和MVVM / RxSwift,则需要先从任何屏幕转换逻辑中剥离视图控制器。

根据我的经验,保持构造块可互换的关键方面是将反应性仅限于屏幕的MVVM绑定部分。有效的意思是使 FlowControllers 保持非反应状态,以便能够使用人们为屏幕选择的任何方法。稍后通过这样做,可以更轻松地替换RxSwift,例如,其他一些方法,例如Apple的Combine

关于最后一个问题,从Swift调用Objective-c功能没有严格的限制,RxSwift无关紧要。并非如此,反之亦然,纯Swift的类和结构无法直接从Objective-C访问。但是通过适当地利用 FlowControllers ,这应该不是什么大问题。如果您采用纯Swift方法及其新构造(可编码等),则潜在的挑战可能是共享数据模型/网络api等。