let ob = Observable.of(1, 1, 1, 3, 5, 7, 9, 9) ob.distinctUntilChanged().subscribe(onNext: { element in print(element) //1 3 5 7 9 }).disposed(by: disposeBag)
single
只发送一次正常事件,如果没有或者超过 1 个会发送 error 事件
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
let ob = Observable.of(1,2) ob.single().subscribe(onNext: { element in print(element) }, onError: { error in print("错误",error) }).disposed(by: disposeBag) // 1 // 错误 Sequence contains more than one element.
//----- single 增加过滤 let ob = Observable.of(1, 2, 1) ob.single { $0 == 2 }.subscribe(onNext: { element in print(element) }, onError: { error in print("错误", error) }).disposed(by: disposeBag) // 2
elementAt
获取指定位置的事件,0 开始。 如果没有发生该指定位置事件 会发送错误
1 2 3 4 5 6 7
let ob = Observable.of(0, 1, 2, 3, 4) ob.elementAt(2).subscribe(onNext: { element in print(element) }, onError: { error in print(error) }).disposed(by: disposeBag) //2
ignoreElements
会忽略所有主动发送的event事件,只保留 error 事件和 Completed事件
1 2 3 4 5 6
let ob = Observable.of(0,1,2,3,4) ob.ignoreElements().subscribe { print("Completed") } onError: { (error) in print(error) }.disposed(by: disposeBag)
take
只取前 n 个事件,数量达到或不足会发送 Completed。
1 2 3 4 5 6 7 8
let ob = Observable.of(0, 1, 2, 3) ob.take(2).subscribe { element in print(element) } onError: { error in print(error) } onCompleted: { print("onCompleted") }.disposed(by: disposeBag)
takeLast
只取后 n 个事件,数量达到或不足会发送 Completed。
1 2 3 4 5 6 7 8
let ob = Observable.of(0, 1, 2, 3, 4) ob.takeLast(12).subscribe { element in print(element) } onError: { error in print(error) } onCompleted: { print("onCompleted") }.disposed(by: disposeBag)
skip
跳过前 n 个事件,发送完剩下的事件后会发送onCompleted。不足 n 个直接发送onCompleted。
1 2 3 4 5 6 7 8
let ob = Observable.of(0,1,2,3,4,5) ob.skip(4).subscribe { (element) in print(element) } onError: { (error) in print(error) } onCompleted: { print("onCompleted") }.disposed(by: disposeBag)