RxSwift学习笔记之Subject
2020-03-01 20:18
417 查看
本文为原创文章,转载请标明出处
AsyncSubject
一个AsyncSubject只在原始Observable完成后,发射来自原始Observable的最后一个值。它会把这最后一个值发射给任何后续的观察者。
let disposeBag = DisposeBag() let subject = AsyncSubject<Int>() subject.onNext(1) subject.subscribe(onNext: { int in print("observerA: \(int)") }, onCompleted: { print("observerA: onCompleted") }).disposed(by: disposeBag) subject.onNext(2) subject.subscribe(onNext: { int in print("observerB: \(int)") }, onCompleted: { print("observerB: onCompleted") }).disposed(by: disposeBag) subject.onNext(3) subject.subscribe(onNext: { int in print("observerC: \(int)") }, onCompleted: { print("observerC: onCompleted") }).disposed(by: disposeBag) subject.onCompleted() subject.onNext(4) subject.subscribe(onNext: { int in print("observerD: \(int)") }, onCompleted: { print("observerD: onCompleted") }).disposed(by: disposeBag)
输出:
observerA: 3 observerB: 3 observerC: 3 observerA: onCompleted observerB: onCompleted observerC: onCompleted observerD: 3 observerD: onCompleted
BehaviorSubject
当观察者订阅BehaviorSubject时,它开始发射原始Observable最近发射的数据,然后继续发射其它任何来自原始Observable的数据。
let disposeBag = DisposeBag() let subject = BehaviorSubject<Int>(value: 0) subject.onNext(1) subject.subscribe(onNext: { int in print("observerA: \(int)") }, onCompleted: { print("observerA: onCompleted") }).disposed(by: disposeBag) subject.onNext(2) subject.subscribe(onNext: { int in print("observerB: \(int)") }, onCompleted: { print("observerB: onCompleted") }).disposed(by: disposeBag) subject.onNext(3)
输出:
observerA: 1 observerA: 2 observerB: 2 observerA: 3 observerB: 3
PublishSubject
PublishSubject只会把在订阅发生的时间点之后来自原始Observable的数据发射给观察者。
let disposeBag = DisposeBag() let subject = PublishSubject<Int>() subject.onNext(0) subject.subscribe(onNext: { int in print("observerA: \(int)") }, onCompleted: { print("observerA: onCompleted") }).disposed(by: disposeBag) subject.onNext(1) subject.subscribe(onNext: { int in print("observerB: \(int)") }, onCompleted: { print("observerB: onCompleted") }).disposed(by: disposeBag) subject.onNext(2)
输出:
observerA: 1 observerA: 2 observerB: 2
ReplaySubject
ReplaySubject在缓存增长到一定大小后会丢弃旧的数据,不然会发射所有来自原始Observable的数据给观察者,无论它们是何时订阅的。
let disposeBag = DisposeBag() let subject = ReplaySubject<Int>.create(bufferSize: 3) subject.onNext(1) subject.onNext(2) subject.onNext(3) subject.subscribe(onNext: { int in print("observerA: \(int)") }, onCompleted: { print("observerA: onCompleted") }).disposed(by: disposeBag) subject.onNext(4) subject.subscribe(onNext: { int in print("observerB: \(int)") }, onCompleted: { print("observerB: onCompleted") }).disposed(by: disposeBag) subject.onCompleted() subject.subscribe(onNext: { int in print("observerC: \(int)") }, onCompleted: { print("observerC: onCompleted") }).disposed(by: disposeBag)
输出:
observerA: 1 observerA: 2 observerA: 3 observerA: 4 observerB: 2 observerB: 3 observerB: 4 observerA: onCompleted observerB: onCompleted observerC: 2 observerC: 3 observerC: 4 observerC: onCompleted
转载于:https://www.cnblogs.com/metaphors/p/9358238.html
- 点赞
- 收藏
- 分享
- 文章举报
相关文章推荐
- RxJS学习笔记之Subject
- 关于RxJS Subject的学习笔记
- RxSwift学习教程之类型对象Subject详解
- iOS(Swift)学习笔记之SnapKit+自定义UI组件
- Swift学习笔记(三十二)——可变参数
- swift学习笔记6 闭包
- swift学习笔记->函数
- Swift学习笔记 (五)
- 小波说雨燕 第三季 构建 swift UI 之 UI组件集-视图集(四)Alert View视图 学习笔记
- Rx系列学习笔记_使用okhttp拦截器统一处理返回请求
- 大熊的swift学习笔记(三)
- Swift学习笔记(六)枚举类型
- Swift学习笔记(语法篇)-- Optional类型探索
- Swift3.0学习笔记-Classes and Structures
- Swift学习笔记
- Swift学习笔记之基本数据类型-元组
- Swift 学习笔记第一天-变量常量,及数据类型
- Swift3.0学习笔记-SubScripts
- 【Swift】学习笔记(一)——熟知 基础数据类型,编码风格,元组,主张
- Swift学习笔记1——基础部分