网络请求到的数据, BehaviorSubject 作为事件仓库 store,
BehaviorSubject 用户行为事件源, 保持住最新的事件。
用户行为点击,采用 PublishSubject 即时事件源,马上 fire ,作为开关,发起 BehaviorSubject 存储的事件
场景:网络请求到的数据,不是马上展示。是用户点击某个按钮后,才展示
网络请求到的数据,不是马上展示,就需要用 BehaviorSubject 把这个事件 hold 住。
用户点击某个按钮后,才展示。采用 PublishSubject, 作为上面事件的开关,fire 开启事件
代码部分:
struct PerViewModel {
private let inputTap = PublishSubject<Bool>()
private let inputNet = BehaviorSubject<Model?>(value: nil)
var outputNetPop: Observable<Model?>
init() {
let netOK = inputNet.filter { $0 != nil }
outputNetPop = netOK.sample(inputTap)
}
func click(){
inputTap.onNext(true)
}
func popUp(net data: Model){
inputNet.onNext(data)
}
}
RxSwift 的 Operator , Sample 具有这个特性
sample 操作符, 可以不定期的 ( 根据需要 ) 对源Observable ( 第 1 个 ) 进行采样操作。
通过第二个Observable ( 开关 )来控制采样时机。一旦第二个Observable ( 开关 ) 发出一个元素,就从源Observable ( 第 1 个 ) 中取出,最后产生的元素
RxSwift 的 flatMap , 和 flatMapLatest, 我们用起来,一般没什么差别
- 按钮点击,是一个事件的连续流,
- 网络请求,不是一个事件的连续流, 一次性的消耗事件,标准的 trait 特性 Single
- FlatMap
- FlatMapLatest
因为切换订阅对象的情况很少。
一般不会切换,产生订阅事件流的事件流
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。