ReactorKit架构

  • ReactorKit 是一个轻量的响应式编程框架。它结合了 Flux 和响应式编程。用户行为和页面状态都是通过序列相互传递。同时这些序列都是单向的:

    • 页面(View)只能发出用户行为。
    • 而反应器(Reactor)只能发出状态
  • 整体架构

使用 ReactorKit 架构后代码根据职能分为 View(视图)和 Reactor(响应器)两部分:

  • View 是用户直接操作的层级,我们通过监测用户在 View 上的行为,转化成 Action 反馈给 Reactor。
  • Reactor 处理之后又把响应状态 State 传递给 View 层,View 这边显示最终的传递的状态。

简单来说就是 View 层只发出行为,而 Reactor 只发出状态,相互把对方所需要的东西传递给对方,构成一条响应式的序列。

  • Reactor 代码结构

  • Reactor 是与 UI 相互独立的一层,它的作用就是将业务逻辑从 View 中抽离。也就是说每一个 View 都有对应的 Reactor ,并且将所有的逻辑代理都较给 Reactor(Reactor 接收到 View 层发出的 Action,然后通过内部操作,将 Action 转换为 State。)

  • 定义一个 Reactor 需要遵守 Reactor 协议,该协议定义了如下内容:
    四个响应属性:Action、Mutation、State、initialState。
    两个响应方法:mutate()、reduce()

  • 这些响应属性和响应方法的作用,以及相互关系如下:

    • Action:描述用户行为
    • Mutation:描述状态变更( 它可以看作是 Action 到 State 的桥梁)
    • State:描述当前状态
    • initialState:描述初始化状态
    • mutate():处理 Action 执行一些业务逻辑,并转换为 Mutation。
    • reduce(): 通过旧的 State 以及 Mutation 创建一个新的 State。
  • View 代码结构

  • View 为数据展示层,不管是 UIViewController 还是 UIView 都可以看作是 View。View 主要负责发出 Action,同时将 State 绑定到 UI 组件上。

  • 定义一个 View 只需要让它遵循 ReactorKit 的 View 或 StoryboardView 协议即可:

    • 如果 ViewController 是纯代码开发的:则其遵守 View 协议。
    • 如果 ViewController 是 Storyboard 开发的:则其遵守 StoryboardView 协议。
  • View 中需要定义如下内容:

    • disposeBag 属性:协议属性。当 View 的 reactor 变化时,之前的 disposeBag 会自动 disposed。
    • bind(reactor:) 方法:实现用户输入绑定和状态输出绑定。
  • 协议中的 bind() 方法不需要我们手动去调用。遵循 View 协的类将自动获得一个 reactor 属性。当 View 的 reactor 属性被设置时,bind() 方法就会被自动调用。而 reactor 属性的设置又分两种情况:

    • 纯代码开发的 ViewController 则在其创建实例对象后,直接注入 reactor:
    • 使用 Storyboard 的 ViewController 则需要在其内部的 viewDidLoad() 方法中设置 reactor

参考文章:Swift - RxSwift的使用详解72(ReactorKit架构1:安装配置、基本用法)
Swift - RxSwift的使用详解73(ReactorKit架构2:一个用户注册样例)
Swift - RxSwift的使用详解74(ReactorKit架构3:GitHub资源搜索样例)

你可能感兴趣的:(ReactorKit架构)