简介
git地址: https://github.com/ReactiveX/RxSwift参考资料:http://t.swift.gg/d/2-rxswiftReactiveX是通过可观察的流实现异步编程的一种API,它结合了观察者模式、迭代器模式和函数式编程的精华,RxSwift 是 ReactiveX 编程思想的一种实现。
复制代码
subscribe
订阅,是连接观察者和被观察者的操作符.
public func subscribe(on: (event: RxSwift.Event<Self.E>) -> Void) -> Disposable
就是说我们接收到的是事件,在这里一般通过 switch case 获取对应结果。
let sequenceOfInts = PublishSubject<Int>()_ = sequenceOfInts.subscribe {print($0)
}sequenceOfInts.on(.Next(1))
sequenceOfInts.on(.Completed)
复制代码
subscribeNext
指订阅next事件.
public func subscribeNext(onNext: (Self.E) -> Void) -> Disposable
因为只有一种事件,这里的 API 传入的就是事件中包含的具体的值了。
let sequenceOfInts = PublishSubject<Int>()_ = sequenceOfInts.subscribeNext {print($0)
}sequenceOfInts.on(.Next(1))
sequenceOfInts.on(.Completed)
复制代码
subscribeCompleted / subscribeError
只订阅完成/错误事件.
subscribeOnnextOnErrorOnCompleted
public func subscribe(onNext onNext: (Self.E -> Void)? = default, onError: (ErrorType -> Void)? = default, onCompleted: (() -> Void)? = default, onDisposed: (() -> Void)? = default) -> Disposable
takeUntil
当另一个序列开始发射值时,忽略原序列发射的值。
let originalSequence = PublishSubject<Int>()
let whenThisSendsNextWorldStops = PublishSubject<Int>()_ = originalSequence.takeUntil(whenThisSendsNextWorldStops).subscribe {print($0)
}originalSequence.on(.Next(1))
originalSequence.on(.Next(2))
originalSequence.on(.Next(3))whenThisSendsNextWorldStops.on(.Next(1))originalSequence.on(.Next(4))
复制代码
takeWhile
跟filter类似,filter 和 takeWhile 什么时候更能清晰表达你的意思,就用哪个。
let sequence = PublishSubject<Int>()_ = sequence.takeWhile { $0 < 4 }.subscribe {print($0)
}sequence.on(.Next(1))
sequence.on(.Next(2))
sequence.on(.Next(3))
sequence.on(.Next(4))
sequence.on(.Next(5))
复制代码
amb
处理多个序列,只会关心多个序列中最先发送数据的序列,其他序列会被忽略.
let intSequence1 = PublishSubject<Int>()
let intSequence2 = PublishSubject<Int>()
let intSequence3 = PublishSubject<Int>()let _ = [intSequence1, intSequence2, intSequence3].amb().subscribe {print($0)
}intSequence2.onNext(10) // intSequence2 最先发射
intSequence1.onNext(1)
intSequence3.onNext(100)
intSequence1.onNext(2)
intSequence3.onNext(200)
intSequence2.onNext(20)let intSequence1 = PublishSubject<Int>()
let intSequence2 = PublishSubject<Int>()let _ = intSequence1.amb(intSequence2).subscribe { // 只用于比较两个序列print($0)
}intSequence2.onNext(10) // intSequence2 最先发射
intSequence1.onNext(1)
intSequence1.onNext(2)
intSequence2.onNext(20)复制代码
concat
将两个序列合并成一个序列,当一个序列中的所有元素成功发射完成之后,才会发射另一个序列中的元素。 在第一个序列发射完成之前,第二个序列发射的事件都会被忽略,但会接收第一个序列发射完成前第二个序列发射的最后一个事件。
注
如有侵权,请告知删除.