简介
git地址: https://github.com/ReactiveX/RxSwift
参考资料:http://t.swift.gg/d/2-rxswift
ReactiveX是通过可观察的流实现异步编程的一种API,它结合了观察者模式、迭代器模式和函数式编程的精华,RxSwift 是 ReactiveX 编程思想的一种实现。
复制代码
filter
过滤操作
let bag = DisposeBag()
Observable.of(0, 1, 2, 3, 4, 5, 6, 7, 8, 9)
.filter {
$0 % 2 == 0
}
.subscribe {
print($0)
}
.addDisposableTo(bag)
复制代码
distinctUntilChanged
过滤发送与上一个重复的值。
let bag = DisposeBag()
Observable.of(1, 2, 3, 1, 1, 4)
.distinctUntilChanged()
.subscribe {
print($0)
}
.addDisposableTo(bag)
半段序列 1 1 4 的第二个 1 被过滤掉了。
复制代码
take
只处理序列发送的前几个值.
let bag = DisposeBag()
Observable.of(1, 2, 3, 4, 5, 6)
.take(3)
.subscribe {
print($0)
}
.addDisposableTo(bag)
复制代码
takeLast
只处理序列发送的尾部几个值.因此,序列应为有序序列.
let bag = DisposeBag()
Observable.of(1, 2, 3, 4, 5, 6)
.takeLast(3)
.subscribe {
print($0)
}
.addDisposableTo(bag)
复制代码
skip
跳过几个值.
let bag = DisposeBag()
Observable.of(1, 2, 3, 4, 5, 6)
.skip(3)
.subscribe {
print($0)
}
.addDisposableTo(bag)
复制代码
debounce / throttle
在过了一段指定的时间还没发射数据时才发射一个数据,换句话说就是 debounce / throttle 会抑制发射过快的值。注意这一操作需要指定一个线程。
Observable.of(1, 2, 3, 4, 5, 6)
.debounce(1, scheduler: MainScheduler.instance)
.subscribe {
print($0)
}
.addDisposableTo(disposeBag)
可以看到只发射了一个 6 ,因为这个序列发射速度是非常快的,所以过滤掉了前面发射的值.可用在按钮点击上.
复制代码
single
类似于take(1),当序列发射多于一个值时,就会抛出 RxError.MoreThanOneElement ;当序列没有值发射就结束时, single 会抛出 RxError.NoElements 。
Observable.of("?", "?", "?", "?", "?", "?")
.single()
.subscribe(onNext: { print($0) })
.addDisposableTo(disposeBag)
复制代码
注
如有侵权,请告之删除.