RxSwift--Subject底层原理分析及应用
一、Subject概念
Subject作为一个代理者,既可以作为Observer,又可以作为Observable。作为Observer,它可以订阅一个或多个Observable;作为Observable,它可以转发收到来自Observer的数据,也可以发送新的数据。
二、Subject分类
根据不同的场景,一共分为四种类型的Subject:PublishSubject、BehaviorSubject、ReplaySubject、AsyncSubject。下面分别对其底层原理进行分析。
1.PublishSubject
PublishSubject只会把在订阅之后来自原始Observable的数据发送给观察者。
底层源码分析:
- 初始化:进入PublishSubject类,初始化函数init中没做什么操作,但是我们可以找到publish函数的重写:
public override func subscribe<O: ObserverType>(_ observer: O) -> Disposable where O.E == Element {
self._lock.lock()
let subscription = self.