-
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资源搜索样例)
网友评论