具有 MVC 模式的遗留 Objective C 代码是否与 RxSwift 共存?

Does Legacy Objective C code with MVC pattern co-exist with RxSwift?

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

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

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

RxSwift 和 MVVM 本身没有指定如何管理屏幕之间的转换。最常见的方法似乎是使用 FlowControllers。这是一个很好的 read 来熟悉这个概念。

重要的结论是 FlowControllers 适用于任何屏幕方法,无论是 MVC 还是 MVVM / RxSwift。 但是 假设您的 MVC 屏幕(即 viewControllers and/or 故事板的 segues)不依赖于其他屏幕(通过 segues 或视图控制器 pushing/poping 和那种东西)。如果您想混合使用 MVC 和 MVVM / RxSwift,您很可能需要首先从任何屏幕转换逻辑中剥离视图控制器。

根据我的经验,保持构建块可互换的关键方面是限制 反应性 仅对屏幕的 MVVM 绑定部分。它实际上意味着保持 FlowControllers 非反应性,以便能够使用为屏幕选择的任何方法。通过稍后这样做,替换 RxSwift 更容易,例如 Apple 的 Combine 等其他方法。

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