Rx 操作符四
Posted liuxiaokun
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Rx 操作符四相关的知识,希望对你有一定的参考价值。
- from 将其他类型或者数据结构转换为 Observable
当你在使用 Observable 时,如果能够直接将其他类型转换为 Observable,这将是非常省事的。from 操作符就提供了这种功能。
将一个数组转换为 Observable:
let numbers = Observable.from([0, 1, 2])
它相当于:
let numbers = Observable<Int>.create { observer in
observer.onNext(0)
observer.onNext(1)
observer.onNext(2)
observer.onCompleted()
return Disposables.create()
}
将一个可选值转换为 Observable:
let optional: Int? = 1
let value = Observable.from(optional: optional)
它相当于:
let optional: Int? = 1
let value = Observable<Int>.create { observer in
if let element = optional {
observer.onNext(element)
}
observer.onCompleted()
return Disposables.create()
}
- groupBy
将源 Observable 分解为多个子 Observable,并且每个子 Observable 将源 Observable 中“相似”的元素发送出来
groupBy 操作符将源 Observable 分解为多个子 Observable,然后将这些子 Observable 发送出来。
它会将元素通过某个键进行分组,然后将分组后的元素序列以 Observable 的形态发送出来。
- ignoreElements
忽略掉所有的元素,只发出 error 或 completed 事件
ignoreElements 操作符将阻止 Observable 发出 next 事件,但是允许他发出 error 或 completed 事件。
如果并不关心 Observable 的任何元素,你只想知道 Observable 在什么时候终止,那就可以使用 ignoreElements 操作符。
- interval
创建一个 Observable 每隔一段时间,发出一个索引数
interval 操作符将创建一个 Observable,它每隔一段设定的时间,发出一个索引数的元素。它将发出无数个元素。
- just 创建 Observable 发出唯一的一个元素
just 操作符将某一个元素转换为 Observable。
一个序列只有唯一的元素 0:
let id = Observable.just(0)
它相当于:
let id = Observable<Int>.create { observer in
observer.onNext(0)
observer.onCompleted()
return Disposables.create()
}
- map
通过一个转换函数,将 Observable 的每个元素转换一遍
map 操作符将源 Observable 的每个元素应用你提供的转换方法,然后返回含有转换结果的 Observable。
let disposeBag = DisposeBag() Observable.of(1, 2, 3) .map { $0 * 10 } .subscribe(onNext: { print($0) }) .disposed(by: disposeBag)
- merge 将多个 Observables 合并成一个
通过使用 merge 操作符你可以将多个 Observables 合并成一个,当某一个 Observable 发出一个元素时,他就将这个元素发出。
如果,某一个 Observable 发出一个 onError 事件,那么被合并的 Observable 也会将它发出,并且立即终止序列。
let disposeBag = DisposeBag()
let subject1 = PublishSubject() let subject2 = PublishSubject()
Observable.of(subject1, subject2) .merge() .subscribe(onNext: { print($0) }) .disposed(by: disposeBag)
subject1.onNext("???")
subject1.onNext("???")
subject2.onNext("①")
subject2.onNext("②")
subject1.onNext("??")
subject2.onNext("③")
- materialize
将序列产生的事件,转换成元素
通常,一个有限的 Observable 将产生零个或者多个 onNext 事件,然后产生一个 onCompleted 或者 onError 事件。
materialize 操作符将 Observable 产生的这些事件全部转换成元素,然后发送出来。
- never
创建一个永远不会发出元素的 Observable
never 操作符将创建一个 Observable,这个 Observable 不会产生任何事件。
创建一个不会产生任何事件的 Observable:
let id = Observable<Int>.never()
它相当于:
let id = Observable<Int>.create { observer in
return Disposables.create()
}
以上是关于Rx 操作符四的主要内容,如果未能解决你的问题,请参考以下文章