1、filter
(1)Definition
Emits only those elements from an Observable sequence that meet the specified
condition.
只发出那些满足指定条件的事件(elements),将不符合要求的事件过滤掉。
(2)Diagram
![](https://img.haomeiwen.com/i1429511/f743856042166d88.png)
filter.png
只会将 大于10 的 elements 发出。
(3)Code
// MARK: - filter
func demoForFilter() {
let disposeBag = DisposeBag()
let observable = Observable.of(
"🐱", "🐰", "🐶",
"🐸", "🐱", "🐰",
"🐹", "🐸", "🐱")
observable
.filter {
$0 == "🐱"
}
.subscribe(onNext: { print($0) })
.addDisposableTo(disposeBag)
}
(4)Result
![](https://img.haomeiwen.com/i1429511/d9a8cca2572907b5.png)
filter 执行结果.png
2、distinctUntilChanged
(1)Definition
Suppresses sequential duplicate elements emitted by an Observable sequence.
禁止序列发出重复的 element。即:
当下一个事件与前一个事件是不同事件的时候,才会将其发出。
(2)Diagram
![](https://img.haomeiwen.com/i1429511/e02885ca36f3bc65.png)
distinctUntilChanged.png
如果后一个 element 跟前一个 element 重复了,就不会发出后一个 element。
(3)Code
// MARK: - distinctUntilChanged
func demoForDistinctUntilChanged() {
let disposeBag = DisposeBag()
let observable = Observable.of("🐱", "🐷", "🐱", "🐱", "🐱", "🐵", "🐱")
observable
.distinctUntilChanged()
.subscribe(onNext: { print($0) })
.addDisposableTo(disposeBag)
}
(4)Result
![](https://img.haomeiwen.com/i1429511/f2688ea38bdcd0fd.png)
distinctUntilChanged 执行结果.png
3、elementAt
(1)Definition
Emits only the element at the specified index of all elements emitted by an
Observable sequence.
只会发送指定索引的事件(element)
(2)Diagram
![](https://img.haomeiwen.com/i1429511/f49c233681ba80eb.png)
elementAt.png
(3)Code
// MARK: - elementAt
func demoForElementAt() {
let disposeBag = DisposeBag()
let observable = Observable.of("🐱", "🐰", "🐶", "🐸", "🐷", "🐵")
observable
.elementAt(3)
.subscribe(onNext: { print($0) })
.addDisposableTo(disposeBag)
}
(4)Result
![](https://img.haomeiwen.com/i1429511/3f1f48f20f7bb046.png)
elementAt 执行结果.png
4、single
(1)Definition
找出在sequence只发出一次的事件,如果超过一个就会发出error错误
(2)Diagram
(3)Code & Result
// MARK: - single
func demoForSingle() {
let disposeBag = DisposeBag()
let observable = Observable.of("🐱", "🐰", "🐶", "🐸", "🐷", "🐵")
observable
.single()
.subscribe(onNext: { print($0) })
.addDisposableTo(disposeBag)
}
执行结果如下:
🐱
Received unhandled error: /Users/XDLee/Desktop/RxSwift/RxSwift_Transform_Operator/RxSwift_Transform_Operator/ViewController.swift:187:demoForSingle() ->
Sequence contains more than one element.
Observable.of("🐱", "🐰", "🐶", "🐸", "🐷", "🐵")
.single { $0 == "🐸" }
.subscribe { print($0) }
.addDisposableTo(disposeBag)
执行结果如下:
next(🐸)
completed
Observable.of("🐱", "🐰", "🐶", "🐱", "🐰", "🐶")
.single { $0 == "🐰" }
.subscribe { print($0) }
.addDisposableTo(disposeBag)
执行结果如下:
next(🐰)
error(Sequence contains more than one element.)
Observable.of("🐱", "🐰", "🐶", "🐸", "🐷", "🐵")
.single { $0 == "🔵" }
.subscribe { print($0) }
.addDisposableTo(disposeBag)
执行结果如下:
error(Sequence contains more than one element.)
error(Sequence doesn't contain any elements.)
5、take
(1)Definition
Emits only the specified number of elements from the beginning of an Observable
sequence.
只发出前几个事件(elements)
(2)Diagram
![](https://img.haomeiwen.com/i1429511/4f0561465a4e71ac.png)
take.png
表示只发送前2个事件。
(3)Code
// MARK: - take
func demoForTake() {
let disposeBag = DisposeBag()
let observable = Observable.of("🐱", "🐰", "🐶", "🐸", "🐷", "🐵")
observable
.take(3)
.subscribe { print($0) }
.addDisposableTo(disposeBag)
}
(4)Result
![](https://img.haomeiwen.com/i1429511/b01a0992d27493ee.png)
take 执行结果.png
6、takeLast
(1)Definition
表示只发出后几个事件(elements)
(2)Diagram
![](https://img.haomeiwen.com/i1429511/da9127aabfaf1152.png)
takeLast.png
(3)Code
// MARK: - takeLast
func demoForTakeLast() {
let disposeBag = DisposeBag()
let observable = Observable.of("🐱", "🐰", "🐶", "🐸", "🐷", "🐵")
observable
.takeLast(3)
.subscribe { print($0) }
.addDisposableTo(disposeBag)
}
(4)Result
![](https://img.haomeiwen.com/i1429511/30646e5355c485bc.png)
takeLast 执行结果.png
网友评论