美文网首页
RxSwift(6)subject的使用

RxSwift(6)subject的使用

作者: 忆痕无殇 | 来源:发表于2019-08-05 17:05 被阅读0次
1:PublishSubject

必须要在订阅之后,才能收到消息,这个消息也必须是在订阅之后发送的。之前发送的不响应。

  let publishSubject = PublishSubject<Int>.init()
        publishSubject.onNext(0)
     
        publishSubject.subscribe(onNext:{
            print("谁来了\($0)")}).disposed(by: disposeBag)
        publishSubject.onNext(1)
        publishSubject.onNext(2)

输出

谁来了1
谁来了2
2: BehaviorSubject

会为订阅者发送订阅前接收到的最后一个元素。

   
        let publishSubject = BehaviorSubject(value: 1)
        publishSubject.onNext(0)
        publishSubject.onNext(1)
        
        publishSubject.subscribe(onNext:{
            print("谁来了\($0)")}).disposed(by: disposeBag)
        publishSubject.onNext(2)
        publishSubject.onNext(3)

打印结果

谁来了1
谁来了2
谁来了3
3:ReplaySubject

通过create(bufferSize: Int) 决定发送消息之前的订阅响应几个。

  let publishSubject = ReplaySubject<Int>.create(bufferSize: 3)
        publishSubject.onNext(0)
        publishSubject.onNext(1)
        publishSubject.onNext(2)
        publishSubject.onNext(3)

        publishSubject.subscribe(onNext:{
            print("谁来了\($0)")}).disposed(by: disposeBag)
        publishSubject.onNext(4)
        publishSubject.onNext(5)

输出结果

谁来了1
谁来了2
谁来了3
谁来了4
谁来了5
4:AsyncSubject

必须调用* publishSubject.onCompleted()

  • 只响应最后一个事件。
 let publishSubject = AsyncSubject<Int>()
        publishSubject.onNext(0)
        publishSubject.onNext(1)
        publishSubject.onNext(2)
        publishSubject.onNext(3)
        
        publishSubject.subscribe(onNext:{
            print("谁来了\($0)")}).disposed(by: disposeBag)
        publishSubject.onNext(4)
        publishSubject.onNext(5)
        publishSubject.onCompleted()
谁来了5
5:BehaviorRelay

当观察者订阅BehaviorSubject时,它开始发射原始Observable最近发射的数据(如果此时还没有收到任何数据,它会发射一个默认值),然后继续发射其它任何来自原始Observable的数据。

  let publishSubject = BehaviorSubject(value: 1)
        publishSubject.onNext(0)
        publishSubject.onNext(1)
        
        publishSubject.subscribe({
            print("第一次订阅\($0)")
        }).disposed(by: disposeBag)
        
        publishSubject.onNext(2)
        publishSubject.onNext(3)
        publishSubject.subscribe({
            print("第二次订阅\($0)")
        }).disposed(by: disposeBag)
        publishSubject.onNext(4)
        publishSubject.onNext(5)
        
        publishSubject.subscribe({
            print("第三次订阅\($0)")
        }).disposed(by: disposeBag)
        publishSubject.onNext(6)
        publishSubject.onNext(7)

输出结果

第一次订阅next(1)
第一次订阅next(2)
第一次订阅next(3)
第二次订阅next(3)
第一次订阅next(4)
第二次订阅next(4)
第一次订阅next(5)
第二次订阅next(5)
第三次订阅next(5)
第一次订阅next(6)
第二次订阅next(6)
第三次订阅next(6)
第一次订阅next(7)
第二次订阅next(7)
第三次订阅next(7)

相关文章

网友评论

      本文标题:RxSwift(6)subject的使用

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