Rx php,Rx 操作符三(示例代码)

deferred

直到订阅发生,才创建 Observable,并且为每位订阅者创建全新的 Observable image.png deferred 操作符将等待观察者订阅它,才创建一个 Observable,它会通过一个构建函数为每一位订阅者创建新的 Observable。看上去每位订阅者都是对同一个 Observable 产生订阅,实际上它们都获得了独立的序列。

在一些情况下,直到订阅时才创建 Observable 是可以保证拿到的数据都是最新的。

delay

将 Observable 的每一个元素拖延一段时间后发出

image.png

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

delaySubscription

进行延时订阅

image.png

delaySubscription 操作符将在经过所设定的时间后,才对 Observable 进行订阅操作

dematerialize

dematerialize 操作符将 materialize 转换后的元素还原

distinctUntilChanged

阻止 Observable 发出相同的元素

image.png

distinctUntilChanged 操作符将阻止 Observable 发出相同的元素。如果后一个元素和前一个元素是相同的,那么这个元素将不会被发出来。如果后一个元素和前一个元素不相同,那么这个元素才会被发出来。

let disposeBag = DisposeBag()

Observable.of("??", "??", "??", "??", "??", "??", "??")

.distinctUntilChanged()

.subscribe(onNext: { print($0) })

.disposed(by: disposeBag)

image.png

do 当 Observable 产生某些事件时,执行某个操作

image.png

当 Observable 的某些事件产生时,可以使用 do 操作符来注册一些回调操作。这些回调会被单独调用,它们会和 Observable 原本的回调分离。

elementAt

只发出 Observable 中的第 n 个元素

image.png

elementAt 操作符将拉取 Observable 序列中指定索引数的元素,然后将它作为唯一的元素发出。

let disposeBag = DisposeBag()

Observable.of("??", "??", "??", "??", "??", "??")

.elementAt(3)

.subscribe(onNext: { print($0) })

.disposed(by: disposeBag)

empty

创建一个空 Observable

image.png

empty 操作符将创建一个 Observable,这个 Observable 只有一个完成事件。

创建一个空 Observable:

let id = Observable.empty()

它相当于:

let id = Observable.create { observer in

observer.onCompleted()

return Disposables.create()

}

error

创建一个只有 error 事件的 Observable

error 操作符将创建一个 Observable,这个 Observable 只会产生一个 error 事件

创建一个只有 error 事件的 Observable:

let error: Error = ...

let id = Observable.error(error)

相当于:

let error: Error = ...

let id = Observable.create { observer in

observer.onError(error)

return Disposables.create()

}

filter

仅仅发出 Observable 中通过判定的元素

filter 操作符将通过你提供的判定方法过滤一个 Observable。

let disposeBag = DisposeBag()

Observable.of(2, 30, 22, 5, 60, 1)

.filter { $0 > 10 }

.subscribe(onNext: { print($0) })

.disposed(by: disposeBag)

image.png

flatMap 将 Observable 的元素转换成其他的 Observable,然后将这些 Observables 合并

image.png

flatMap 操作符将源 Observable 的每一个元素应用一个转换方法,将他们转换成 Observables。 然后将这些 Observables 的元素合并之后再发送出来。

这个操作符是非常有用的,例如,当 Observable 的元素本身拥有其他的 Observable 时,你可以将所有子 Observables 的元素发送出来。

let disposeBag = DisposeBag()

let first = BehaviorSubject(value: "????")

let second = BehaviorSubject(value: "???")

let variable = Variable(first)

variable.asObservable()

.flatMap { $0 }

.subscribe(onNext: { print($0) })

.disposed(by: disposeBag)

first.onNext("??")

variable.value = second

second.onNext("???")

first.onNext("??")

image.png

flatMapLatest

将 Observable 的元素转换成其他的 Observable,然后取这些 Observables 中最新的一个

image.png

flatMapLatest 操作符将源 Observable 的每一个元素应用一个转换方法,将他们转换成 Observables。一旦转换出一个新的 Observable,就只发出它的元素,旧的 Observables 的元素将被忽略掉。

tips:与 flatMap 比较更容易理解

let disposeBag = DisposeBag()

let first = BehaviorSubject(value: "????")

let second = BehaviorSubject(value: "???")

let variable = Variable(first)

variable.asObservable()

.flatMapLatest { $0 }

.subscribe(onNext: { print($0) })

.disposed(by: disposeBag)

first.onNext("??")

variable.value = second

second.onNext("???")

first.onNext("??")

image.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值