技巧
- 始终努力将系统或其部件建模为纯函数。这些纯函数可以轻松测试,可用于修改操作符行为。
- 当使用Rx时,首先尝试使用内置运算符。
- 如果经常使用某些运算符组合,创建便利运算符。
例如
extension ObservableType where E: MaybeCool # 技巧
- 尽量构建为纯函数。这些纯函数可以轻松测试并且可用于修改操作符行为。
- 当使用Rx时,首先尝试使用内置运算符。
- 如果经常使用某些运算符组合,创建便捷运算符。
例如
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)
**chaining disposables的首选方式是使用操作符。**
textField.rx.text
.flatMapLatest { text in
// 假设这不会失败并在主调度程序上返回结果,
// 否则可以正确使用catchError
和observeOn(MainScheduler.instance)
return performURLRequest(text)
}
...
.disposed(by: disposeBag) // 只有一个最顶层的disposable
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)
链接disposables的首选方式是使用操作符。
textField.rx.text
.flatMapLatest { text in
// 假设这不会失败并在主调度程序上返回结果,
// 否则可以正确使用`catchError`和`observeOn(MainScheduler.instance)`
return performURLRequest(text)
}
...
.disposed(by: disposeBag) // 只有一个最顶层的disposable