RxFeedback 学习

核心功能:自定义Event的触发事件集合,以及订阅该事件触发后会修改的一个状态集对象的Observable。同时自定义 在事件触发后,对状态集对象进行数据变更。

样例代码:

//在下面代码中,状态集对象就是Int
typealias State = Int
//自定义事件是 增加和减少
enum Event {
    case increment
    case decrement
}

Observable.system(
    initialState: 0,	//声明状态集对象的初始化值
//reduce里,是接收到 event事件后,对状态集对象进行自定义处理的代码。然后将新的状态集对象返回。  STEP 2
    reduce: { (state, event) -> State in
        switch event {
        case .increment:
            return state + 1
        case .decrement:
            return state - 1
        }
    },
    scheduler: MainScheduler.instance,
    feedback:
//bind 传入owner对象,作为 第二个closure的首个参数返回。
//第二个closure参数作用是 自定义Event的触发时机,以及 对状态集对象Observable的订阅操作
//state就是一个 状态集对象的Observable,即 ObservableSchedulerContext<State>
        bind(self) { me, state -> Bindings<Event> in
//对状态集对象Observable的订阅集合
            let subscriptions = [
                state.map(String.init).bind(to: me.label.rx.text) //STEP3
            ]
//自定义Event的触发器;这里虚构了两个button的action
            let events = [
                me.plus.rx.tap.map { Event.increment },   //STEP 1
                me.minus.rx.tap.map { Event.decrement } //STEP 1
            ]

            return Bindings(
                subscriptions: subscriptions,
                events: events
            )
        }
)