RxSwift笔记 - Observable Utility Operators

57 篇文章 1 订阅
23 篇文章 0 订阅


Delay

该操作符会将 Observable 的所有元素都先拖延一段设定好的时间,然后才将它们发送出来

delay.c.png

Observable.of(1, 2, 1)
            .delay(3, scheduler: MainScheduler.instance) //元素延迟3秒才发出
            .subscribe(onNext: { print($0) })
            .disposed(by: disposeBag)

Do

注册一个动作作为原始 Observable 生命周期事件的一种占位符

do.c.png

Observable.of(1, 2, 3)
        .do(onNext: { print($0*2) })
        .subscribe(onNext: { print($0) })
        .disposed(by: disposeBag)

/*
2
1
4
2
6
3
*/

Materialize

Materialize 操作符会将 Observable 产生的事件全部转换成元素,然后发送出来

materialize.c.png

Observable.of(1, 2, 1)
            .materialize()
            .subscribe(onNext: { print($0) })
            .disposed(by: disposeBag)

/*
next(1)
next(2)
next(3)
completed
*/

Dematerialize

和 Materialize 正好相反,它可以将 Materialize 转换后的元素还原

dematerialize.c.png

Observable.of(1, 2, 1)
            .materialize()
            .dematerialize()
            .subscribe(onNext: { print($0) })
            .disposed(by: disposeBag)

/*
1
2
1
*/

ObserveOn

指定 Observable 在那个 Scheduler 发出通知

observeOn.c.png

Observable.of(1, 2, 1).observeOn(MainScheduler.instance)
    .subscribe(onNext: { value in
        print(value)
    }).disposed(by: disposeBag)

SubscribeOn

指定 Observable 在那个 Scheduler 执行

subscribeOn.c.png

Observable.of(1, 2, 1).subscribeOn(ConcurrentDispatchQueueScheduler(qos: .userInitiated))
    .subscribe(onNext: { value in
    print(value)
}).disposed(by: disposeBag)

ObserveOn + subscribeOn 结合使用

schedulers.png

Observable.of(1, 2, 1).subscribeOn(ConcurrentDispatchQueueScheduler(qos: .userInitiated))
    .observeOn(MainScheduler.instance)
    .subscribe(onNext: { data in
    print(data)
}).disposed(by: disposeBag)

Timeout

使用该操作符可以设置一个超时时间。如果源 Observable 在规定时间内没有发任何出元素,就产生一个超时的 error 事件

timeout.c.png

Observable.of(1, 2, 1).map({ item in
    //元素延迟3秒才发出
    return Observable.of(item).delay(3, scheduler: MainScheduler.instance)
}).timeout(2, scheduler: MainScheduler.instance) //超过两秒没发出元素,则产生error事件
  .subscribe(onNext: { print($0) })
  .disposed(by: disposeBag)

 /*
 sequence timeout
 */

Using

使用 using 操作符创建 Observable 时,同时会创建一个可被清除的资源,一旦 Observable 终止了,那么这个资源就会被清除掉了

using.c.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值