RxSwift笔记五过滤序列

本文介绍了RxSwift中常用的过滤和处理操作符,包括filter、distinctUntilChanged、take、takeLast、skip、debounce/throttle及single等。通过示例展示了如何使用这些操作符来处理异步数据流。

简介

    git地址: https://github.com/ReactiveX/RxSwift
    参考资料:http://t.swift.gg/d/2-rxswift
    
    ReactiveX是通过可观察的流实现异步编程的一种API,它结合了观察者模式、迭代器模式和函数式编程的精华,RxSwift 是 ReactiveX 编程思想的一种实现。
复制代码

filter

过滤操作

let bag = DisposeBag()
Observable.of(0, 1, 2, 3, 4, 5, 6, 7, 8, 9)
    .filter {
        $0 % 2 == 0
    }
    .subscribe {
        print($0)
    }
    .addDisposableTo(bag)
复制代码

distinctUntilChanged

过滤发送与上一个重复的值。

let bag = DisposeBag()
Observable.of(1, 2, 3, 1, 1, 4)
    .distinctUntilChanged()
    .subscribe {
        print($0)
    }
    .addDisposableTo(bag)
半段序列 1 1 4 的第二个 1 被过滤掉了。
复制代码

take

只处理序列发送的前几个值.

let bag = DisposeBag()
Observable.of(1, 2, 3, 4, 5, 6)
    .take(3)
    .subscribe {
        print($0)
    }
    .addDisposableTo(bag)
复制代码

takeLast

只处理序列发送的尾部几个值.因此,序列应为有序序列.

let bag = DisposeBag()
Observable.of(1, 2, 3, 4, 5, 6)
    .takeLast(3)
    .subscribe {
        print($0)
    }
    .addDisposableTo(bag)
复制代码

skip

跳过几个值.

let bag = DisposeBag()
Observable.of(1, 2, 3, 4, 5, 6)
    .skip(3)
    .subscribe {
        print($0)
    }
    .addDisposableTo(bag)
复制代码

debounce / throttle

在过了一段指定的时间还没发射数据时才发射一个数据,换句话说就是 debounce / throttle 会抑制发射过快的值。注意这一操作需要指定一个线程。

Observable.of(1, 2, 3, 4, 5, 6)
    .debounce(1, scheduler: MainScheduler.instance)
    .subscribe {
        print($0)
    }
    .addDisposableTo(disposeBag)
可以看到只发射了一个 6 ,因为这个序列发射速度是非常快的,所以过滤掉了前面发射的值.可用在按钮点击上.
复制代码

single

类似于take(1),当序列发射多于一个值时,就会抛出 RxError.MoreThanOneElement ;当序列没有值发射就结束时, single 会抛出 RxError.NoElements 。

Observable.of("?", "?", "?", "?", "?", "?")
    .single()
    .subscribe(onNext: { print($0) })
    .addDisposableTo(disposeBag)
复制代码

如有侵权,请告之删除.

转载于:https://juejin.im/post/5ab1d1325188257ddb0f7d0b

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值