订阅 Observable
-
方法一
使用 subscribe() ,会订阅到所有的事件(next、complete、error)let observable = Observable.of("A", "B", "C") observable.subscribe { event in print(event) // 如果想要获取到这个事件里的数据,可以通过 event.element print(event.element) }
-
方法二
通过不同的 block 回调处理不同类型的 event,而且会把数据直接解包出来let observable = Observable.of("A", "B", "C") observable.subscribe(onNext: { element in print(element) }, onError: { error in print(error) }, onCompleted: { print("completed") }, onDisposed: { print("disposed") })
监听事件的生命周期
我们可以使用 doOn 方法来监听事件的生命周期,它会在每一次事件发送前被调用
let observable = Observable.of("A", "B", "C")
observable
.do(onNext: { element in
print("Intercepted Next:", element)
}, onError: { error in
print("Intercepted Error:", error)
}, onCompleted: {
print("Intercepted Completed")
}, onDispose: {
print("Intercepted Disposed")
})
.subscribe(onNext: { element in
print(element)
}, onError: { error in
print(error)
}, onCompleted: {
print("completed")
}, onDisposed: {
print("disposed")
})
Observable 的销毁
(1)一个 Observable 序列被创建出来后它不会马上就开始被激活从而发出 Event,而是要等到它被某个人订阅了才会激活它
(2)而 Observable 序列激活之后要一直等到它发出了 .error 或者 .completed 的 event 后,它才被终结
-
dispose()
手动销毁let observable = Observable.of("A", "B", "C") //使用subscription常量存储这个订阅方法 let subscription = observable.subscribe { event in print(event) } //调用这个订阅的dispose()方法 subscription.dispose()
-
DisposeBag
自动销毁:我们可以把一个 DisposeBag 对象看成一个垃圾袋,把用过的订阅行为都放进去,而这个 DisposeBag 就会在自己快要 dealloc 的时候,对它里面的所有订阅行为都调用 dispose() 方法。一个订阅行为会有一个Disposable类型的返回值,所以可以在结尾使用.disposed
let disposeBag = DisposeBag() //第1个Observable,及其订阅 let observable1 = Observable.of("A", "B", "C") observable1.subscribe { event in print(event) }.disposed(by: disposeBag) //第2个Observable,及其订阅 let observable2 = Observable.of(1, 2, 3) observable2.subscribe { event in print(event) }.disposed(by: disposeBag)