Skip to content

Latest commit

 

History

History
57 lines (49 loc) · 1.53 KB

2019-07-03-tips.md

File metadata and controls

57 lines (49 loc) · 1.53 KB
title excerpt categories tags author_profile sidebar
RxSwift Tips
总结 RxSwift 中的 Tips
RxSwift
RxSwift
false
nav
RxSwift-docs
  • 始终努力对你的系统全部或者部分建模为纯函数,这些纯函数可以轻松测试,还可以用来修改操作符行为
  • 当使用 Rx 的时候,首先尝试组合内建的操作符
  • 如果经常使用操作符的组合,创建自己的便利操作符

e.g.

extension ObservableType where E: MaybeCool {

    public func coolElements()
        -> Observable<E> {
          return filter { e -> Bool in
              return e.isCool
          }
    }
}
  • Rx 操作符尽可能保持一般性来适用多成场景,但是总有难以建模的边界情况,这是你可以创建自己的操作符,可以在自建的操作符中引用内建的操作符
  • 始终使用操作符来撰写订阅

尽可能避免嵌套订阅,错误的例子如下

textField.rx.text.subscribe(onNext: { text in
  performURLRequest(text).subscribe(onNext: { result in
  	...
  })
.disposed(by: disposeBag)
})
.disposed(by: disposeBag)

优选使用操作符链接 disposable

textField.rx.text
    .flatMapLatest { text in
        // Assuming this doesn't fail and returns result on main scheduler,
        // otherwise `catchError` and `observeOn(MainScheduler.instance)` can be used to
        // correct this.
        return performURLRequest(text)
    }
    ...
    .disposed(by: disposeBag) // only one top most disposable