iOS RXSwift 5.13
skipWhile
跳过 Observable
中头几个元素,直到元素的判定为否
skipWhile 操作符可以让你忽略源 Observable
中头几个元素,直到元素的判定为否后,它才镜像源 Observable
。
演示
let disposeBag = DisposeBag()
Observable.of(1, 2, 3, 4, 3, 2, 1)
.skipWhile { $0 < 4 }
.subscribe(onNext: { print($0) })
.disposed(by: disposeBag)
输出结果:
4
3
2
1
skipUntil
跳过 Observable
中头几个元素,直到另一个 Observable
发出一个元素
skipUntil 操作符可以让你忽略源 Observable
中头几个元素,直到另一个 Observable
发出一个元素后,它才镜像源 Observable
。
演示
let disposeBag = DisposeBag()
let sourceSequence = PublishSubject<String>()
let referenceSequence = PublishSubject<String>()
sourceSequence
.skipUntil(referenceSequence)
.subscribe(onNext: { print($0) })
.disposed(by: disposeBag)
sourceSequence.onNext("🐱")
sourceSequence.onNext("🐰")
sourceSequence.onNext("🐶")
referenceSequence.onNext("🔴")
sourceSequence.onNext("🐸")
sourceSequence.onNext("🐷")
sourceSequence.onNext("🐵")
输出结果:
🐸
🐷
🐵
skip
跳过 Observable
中头 n 个元素
skip 操作符可以让你跳过 Observable
中头 n 个元素,只关注后面的元素。
演示
let disposeBag = DisposeBag()
Observable.of("🐱", "🐰", "🐶", "🐸", "🐷", "🐵")
.skip(2)
.subscribe(onNext: { print($0) })
.disposed(by: disposeBag)
输出结果:
🐶
🐸
🐷
🐵
single
限制 Observable
只有一个元素,否出发出一个 error
事件
single 操作符将限制 Observable
只产生一个元素。如果 Observable
只有一个元素,它将镜像这个 Observable
。如果 Observable
没有元素或者元素数量大于一,它将产生一个 error
事件。
shareReplay
使观察者共享 Observable
,观察者会立即收到最新的元素,即使这些元素是在订阅前产生的
shareReplay 操作符将使得观察者共享源 Observable
,并且缓存最新的 n 个元素,将这些元素直接发送给新的观察者。
scan
持续的将 Observable
的每一个元素应用一个函数,然后发出每一次函数返回的结果
scan 操作符将对第一个元素应用一个函数,将结果作为第一个元素发出。然后,将结果作为参数填入到第二个元素的应用函数中,创建第二个元素。以此类推,直到遍历完全部的元素。
这种操作符在其他地方有时候被称作是 accumulator。
演示
let disposeBag = DisposeBag()
Observable.of(10, 100, 1000)
.scan(1) { aggregateValue, newValue in
aggregateValue + newValue
}
.subscribe(onNext: { print($0) })
.disposed(by: disposeBag)
输出结果:
11
111
1111