RxSwift笔记

防止表格多次刷新的说明
(1)flatMapLatest 的作用是当在短时间内(上一个请求还没回来)连续点击多次“刷新”按钮,虽然仍会发起多次请求,但表格只会接收并显示最后一次请求。避免表格出现连续刷新的现象。

//随机的表格数据
let randomResult = refreshButton.rx.tap.asObservable()
    .startWith(()) //加这个为了让一开始就能自动请求一次数据
    .flatMapLatest(getRandomResult)  //连续请求时只取最后一次数据
    .share(replay: 1)

(2)也可以改用 flatMapFirst 来防止表格多次刷新,它与 flatMapLatest 刚好相反,如果连续发起多次请求,表格只会接收并显示第一次请求。

//随机的表格数据
let randomResult = refreshButton.rx.tap.asObservable()
    .startWith(()) //加这个为了让一开始就能自动请求一次数据
    .flatMapFirst(getRandomResult)  //连续请求时只取第一次数据
    .share(replay: 1)

(3)我们还可以在源头进行限制下。即通过 throttle 设置个阀值(比如 1 秒),如果在1秒内有多次点击则只取最后一次,那么自然也就只发送一次数据请求。

//随机的表格数据
let randomResult = refreshButton.rx.tap.asObservable()
    .throttle(1, scheduler: MainScheduler.instance) //在主线程中操作,1秒内值若多次改变,取最后一次
    .startWith(()) //加这个为了让一开始就能自动请求一次数据
    .flatMapLatest(getRandomResult)
    .share(replay: 1)

停止数据请求
通过 takeUntil 操作符实现。当 takeUntil 中的 Observable 发送一个值时,便会结束对应的 Observable。

//随机的表格数据
        let randomResult = refreshButton.rx.tap.asObservable()
            .startWith(()) //加这个为了让一开始就能自动请求一次数据
            .flatMapLatest{
                self.getRandomResult().takeUntil(self.cancelButton.rx.tap)
            }
            .share(replay: 1)

数据搜索过滤

https://www.hangge.com/blog/cache/detail_1994.html

你可能感兴趣的:(RxSwift笔记)