RxFeedback 的作者。他也是 的创始人以及 ReactiveX 组织 的核心成员。他有 16 年以上的编程经验( VR 引擎,BPM 系统,移动端应用程序,机器人等),最近在研究响应式编程。

    介绍

    RxSwift 最简单的架构

    模拟一个。

    系统状态用 State 表示,事件用 Event 表示。


    7.2 RxFeedback - 图7

    1. initialState: 0,
    2. reduce: { (state, event) -> State in
    3. switch event {
    4. case .increment:
    5. return state + 1
    6. case .decrement:
    7. return state - 1
    8. }
    9. },
    10. scheduler: MainScheduler.instance,
    11. feedback:
    12. // UI is user feedback
    13. UI.bind(self) { me, state -> UI.Bindings<Event> in
    14. ]
    15. let events = [
    16. me.plus!.rx.tap.map { Event.increment },
    17. me.minus!.rx.tap.map { Event.decrement }
    18. ]
    19. return UI.Bindings(subscriptions: subscriptions, events: events)
    20. }
    21. )

    这是一个简单计数的例子,只是用于演示 RxFeedback 架构。


    State

    系统状态用 State 表示:

    • 这里的状态就是计数的数值

    1. enum Event {
    2. case increment
    3. case decrement
    4. }
    • increment 增加数值事件
    • decrement 减少数值事件

    当产生 Event 时更新状态:

    • increment 状态数值加一
    • decrement 状态数值减一

    Feedback Loop

    状态输出到 UI 页面上,或者将 UI 事件输入到反馈循环里面去:

    1. Observable.system(
    2. initialState: 0,
    3. scheduler: MainScheduler.instance,
    4. // UI is user feedback
    5. UI.bind(self) { me, state -> UI.Bindings<Event> in
    6. let subscriptions = [
    7. state.map(String.init).bind(to: me.label!.rx.text)
    8. ]
    9. let events = [
    10. me.plus!.rx.tap.map { Event.increment },
    11. me.minus!.rx.tap.map { Event.decrement }
    12. ]
    13. return UI.Bindings(subscriptions: subscriptions, events: events)
    14. }
    15. )
    • 将状态数值用 显示出来
    • 将增加按钮的点击,作为增加数值事件传入
    • 将减少按钮的点击,作为减少数值事件传入

    这就是 架构,它的优势是:

    • 简单
    • 直接
    • 容易调试
    • 能被应用到任何级别
    • 完美支持依赖注入
    • 支持循环依赖
    • 完全将业务逻辑分离(跨平台)

    示例

    下一节将用 来演示如何使用 RxFeedback