RxSwift笔记 - Observable Utility Operators
程序员文章站
2022-07-14 22:29:48
...
Delay
该操作符会将 Observable 的所有元素都先拖延一段设定好的时间,然后才将它们发送出来
Observable.of(1, 2, 1)
.delay(3, scheduler: MainScheduler.instance) //元素延迟3秒才发出
.subscribe(onNext: { print($0) })
.disposed(by: disposeBag)
Do
注册一个动作作为原始 Observable 生命周期事件的一种占位符
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 产生的事件全部转换成元素,然后发送出来
Observable.of(1, 2, 1)
.materialize()
.subscribe(onNext: { print($0) })
.disposed(by: disposeBag)
/*
next(1)
next(2)
next(3)
completed
*/
Dematerialize
和 Materialize 正好相反,它可以将 Materialize 转换后的元素还原
Observable.of(1, 2, 1)
.materialize()
.dematerialize()
.subscribe(onNext: { print($0) })
.disposed(by: disposeBag)
/*
1
2
1
*/
ObserveOn
指定 Observable 在那个 Scheduler 发出通知
Observable.of(1, 2, 1).observeOn(MainScheduler.instance)
.subscribe(onNext: { value in
print(value)
}).disposed(by: disposeBag)
SubscribeOn
指定 Observable 在那个 Scheduler 执行
Observable.of(1, 2, 1).subscribeOn(ConcurrentDispatchQueueScheduler(qos: .userInitiated))
.subscribe(onNext: { value in
print(value)
}).disposed(by: disposeBag)
ObserveOn + subscribeOn 结合使用
Observable.of(1, 2, 1).subscribeOn(ConcurrentDispatchQueueScheduler(qos: .userInitiated))
.observeOn(MainScheduler.instance)
.subscribe(onNext: { data in
print(data)
}).disposed(by: disposeBag)
Timeout
使用该操作符可以设置一个超时时间。如果源 Observable 在规定时间内没有发任何出元素,就产生一个超时的 error 事件
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 终止了,那么这个资源就会被清除掉了