添加链接
link管理
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接

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

RxSwift 最简单的架构

typealias Feedback<State, Event> = (Observable<State>) -> Observable<Event>
public static func system<State, Event>(
    initialState: State,
    reduce: @escaping (State, Event) -> State,
    feedback: Feedback<State, Event>...
) -> Observable<State>
  • 已经发生 -> Event
  • 即将发生 -> Request
  • 执行 Request -> Feedback loop
  • 首先系统行为被明确声明出来,然后在调用 subscribe 后开始运作 => 编译时就保证了不会有“未处理状态”
  • 大多数逻辑是 纯函数,可以通过 xCode 调试器调试,或者将命令打印出来
  • 适用于任何级别
    • 应用程序(state 被储存在数据库中,CoreData, Firebase, Realm)
    • view controller (state 被储存在 system 操作符)
    • 在 feedback loop 中(feedback loop 中 调用另一个 system 操作符)
    • 容易做依赖注入
    • Reducer 是 纯函数,只需调用他并断言结果即可
    • 伴随 附加作用 的测试 -> TestScheduler
    • 可以处理循环依赖
    • 完全从附加作用中分离业务逻辑
      • 业务逻辑可以在不同平台之间转换
      • Observable.system(
            initialState: 0,
            reduce: { (state, event) -> State in
                switch event {
                case .increment:
                    return state + 1
                case .decrement:
                    return state - 1
            scheduler: MainScheduler.instance,
            feedback:
                // UI is user feedback
                bind(self) { me, state -> Bindings<Event> in
                    let subscriptions = [
                        state.map(String.init).bind(to: me.label.rx.text)
                    let events = [
                        me.plus.rx.tap.map { Event.increment },
                        me.minus.rx.tap.map { Event.decrement }
                    return Bindings(
                        subscriptions: subscriptions,
                        events: events
        

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

  •