美文网首页
Observable订阅、事件监听、订阅销毁

Observable订阅、事件监听、订阅销毁

作者: FallPine | 来源:发表于2018-09-03 17:30 被阅读215次

订阅 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)
    

参考文章:Swift - RxSwift的使用详解4(Observable订阅、事件监听、订阅销毁)

相关文章

网友评论

      本文标题:Observable订阅、事件监听、订阅销毁

      本文链接:https://www.haomeiwen.com/subject/irriwftx.html