美文网首页
RxFeedback

RxFeedback

作者: V_coa | 来源:发表于2017-09-29 00:47 被阅读140次

RxFeedback

RxFeedback 是用于 RxSwift 的一个架构

为什么要使用它

  • 简单
    • 如果它是一个状态那么它就是一个 State
    • 如果这是一种修改状态的方法那么它就是一个 Event/Command
    • 如果它是一个作用,将其编码为状态的一部分,然后设计一个反馈循环
  • 声明
    • 系统行为首先声明指定并且在订阅后的作用,编译时期保证,没有 "未处理状态"
  • 调试容易
    • 很多逻辑都是纯函数
  • 可用于很多层次
    • Entire system
    • 应用状态的存储 (CoreData, Firebase, Realm)
    • ViewController state 存储在 system 操作中
    • 在 feedback loop 可以有另一个 feedback loop
  • 可以很好的依赖注入
  • 容易测试
    • Reducer 是纯函数,可以对它进行 assert
    • 在某些情况作用可以被测试
  • 可以模拟循环依赖
  • 可以从作用中分离业务逻辑
  • 业务逻辑可以在平台之间进行转换

Example

Observable.system(
    initialState: 0,
    reduce: { (state, event) -> State in
        switch event {
        case .increment:
            return state + 1
        case .decrement:
            return state - 1
        }
    },
    scheduler: MainScheduler.instance,
    scheduledFeedback:
    UI.bind(self) { me, state -> UI.Bindings<Event> in
        let subscriptions = [
            state.map(String.init).bind(to: me.countLabel.rx.text)
        ]
        
        let events = [
            me.plusBtn.rx.tap.map { Event.increment },
            me.minusBtn.rx.tap.map { Event.decrement }
        ]
        return UI.Bindings(subscriptions: subscriptions, events: events)
    }
)
.subscribe()
.addDisposableTo(disposeBag)
  • initialState 初始化的值
  • reduce 纯函数,event 发送了,然后执行相关的操作,返回 state
  • scheduler 指定 scheduler
  • scheduledFeedback 指定 scheduledFeedback,返回 (ObservableSchedulerContext<State>) -> Observable<Event> where WeakOwner: AnyObject 类型
UI.bind(self) { me, state -> UI.Bindings<Event> in
    // state type 为 ObservableSchedulerContext<State>
    let subscriptions = [
        state.map(String.init).bind(to: me.countLabel.rx.text)
    ]
    
    let events = [
        me.plusBtn.rx.tap.map { Event.increment },
        me.minusBtn.rx.tap.map { Event.decrement }
    ]
    // 返回 Bindings<Event>,subscriptions bind 相关操作,events 相关事件
    return UI.Bindings(subscriptions: subscriptions, events: events)
}

相关文章

  • RxFeedback架构

    RxFeedback的核心 RxFeedback 的核心内容为状态(State)、事件(Event)、反馈循环(F...

  • RxFeedback

    RxFeedback RxFeedback 是用于 RxSwift 的一个架构 为什么要使用它 简单如果它是一个状...

  • RxFeedback 粗略源码分析

    在RxSwift文档中,介绍了它的常用框架,现在就来看看其中之一RxFeedback,至于用法与优势可以查看文档中...

网友评论

      本文标题:RxFeedback

      本文链接:https://www.haomeiwen.com/subject/asjbextx.html