7.3 ReactorKit

Swift CocoaPods Platform Build Status Codecov CocoaDocs

作者

Jeon SuyeolReactorKit 的作者。他也发布了一些富有创造性的框架,如 ThenURLNavigatorSwiftyImage 以及一些开源项目 RxTodoDrrrible。他也是多个组织的成员 RxSwiftCommunityMoyaSwiftKorea

介绍

ReactorKit 结合了 Flux响应式编程。用户行为和页面状态都是通过序列相互传递。这些序列都是单向的:页面只能发出用户行为,然而反应器(Reactor)只能发出状态。

View

View 用于展示数据。ViewControllerCell 都可以看作是 ViewView 将用户输入绑定到 Action 的序列上,同时将页面状态绑定到 UI 组件上。

定义一个 View 只需要让它遵循 View 协议即可。然后你的类将自动获得一个 reactor 属性。这个属性应该在 View 的外面被设置:

reactor 属性被设置时,bind(reactor:) 方法就会被调用。执行这个方法来进行用户输入绑定和状态输出绑定。

Reactor

Reactor 是与 UI 相互独立的一层,主要负责状态管理。Reactor 最重要的作用就是将业务逻辑从 View 中抽离。每一个 View 都有对应的 Reactor 并且将所有的逻辑代理给 ReactorReactor 不需要依赖 View,所以它很容易被测试。

遵循 Reactor 协议即可定义一个 Reactor。这个协议需要定义三个类型:ActionMutationState。它也需要一个 initialState 属性。

Action 代表用户行为,State 代表页面状态。MutationActionState 的桥梁。Reactor 通过两步将用户行为序列转换为页面状态序列mutate()reduce()

mutate()

mutate() 接收一个 Action ,然后创建一个 Observable<Mutation>

每种附加作用,如,异步操作,API 调用都是在这个方法内执行。

reduce()

reduce() 通过旧的 State 以及 Mutation 创建一个新的 State

这个方法是一个纯函数。它将同步的返回一个 State。不会产生其他的作用。

transform()

transform() 转换每一种序列。有三种转换方法:

执行这些方法可以转换或者组合其他的序列。例如,transform(mutation:) 最适合用来组合一个全局事件,生成一个 Mutation 序列。

它也可用来做调试:

示例

下一节将用 Github Search 来演示如何使用 ReactorKit

Last updated

Was this helpful?