如何在iOS swift模块化应用程序中执行路由?

Ran*_*sid 6 routing ios swift redux reswift

我正在开发一个非常大的应用程序,因此决定采用模块化方法,在该方法中,每个功能都实现为框架,并且一个功能不应“知道”其他功能。

我决定在ReSwift中大量使用它,这是一个遵循REDUX原理构建iOS应用的库。

我设法将全局应用程序状态与所有功能状态分离开来,因此每个功能都定义了自己的状态,并由全局应用程序状态进行管理。

我面临的下一个挑战是路由/导航。我希望能够在位于Feature1中的一个视图控制器到位于Feature2中的另一个视图控制器之间路由(请记住:我想避免要素之间的依赖关系,因此Feature1对Feature2一无所知)。

我知道我可以在我的应用程序中创建一个中心位置,以处理该应用程序的所有路由,但是我想知道每种功能是否都有实现自己的路由的方法。因此Feature1将路由到Feature2,而无需调用某些中央实现。这样做的动机是每个功能都将向应用程序提供其自己的资源。因此,在REDUX原则中,每个功能都应提供:状态,Reducer,操作和路由器,但是这里的挑战是功能不依赖于其他功能。

用于路由的PS我决定选择ReSwift-Router,它是ReSwift应用程序的声明式路由库。

谢谢!

nik*_*ans 2

看起来我们正在使用类似的架构模式,尽管我决定在每个模块中定义路由器协议,所有这些协议都在某个中央路由器模块中实现。这将模块分开,但我仍然能够对整个应用程序使用集中状态和调度。

在使用了一些路由器库之后,我制作了自己的基于状态的解决方案,以更好地处理 VC 层次结构,同时仍然将状态与 UI 分开。

我认为它符合你的要求。

https://github.com/nikans/MonarchRouter

君主路由器

Monarch Router 是一个声明式路由处理程序,它通过 Coordinator 和 Presenters 将 ViewController 相互解耦。它非常适合 Redux 风格的状态流和响应式框架。

协调器是通过声明与 URL 结构映射的路由层次结构来构造的。演示者抽象 UI 创建和修改。

特征:

  • 导航复杂的 ViewControlles 层次结构并在路径更改时展开。
  • 深度链接处理推送通知、快捷方式和通用链接。
  • 通过更改窗口的 rootViewController 来切换顶级应用程序部分。
  • 导航叉子(像演示者一样的选项卡栏)。
  • 导航堆栈(即导航控制器)。
  • 打开和关闭模态,具有自己的层次结构。
  • 解析路由参数并将其传递到端点。