AsyncSubject 將在源 Observable 產(chǎn)生完成時(shí)間之后,發(fā)出最后一個(gè)元素(有且僅有最后一個(gè)元素)。如果源 Observable 沒(méi)有發(fā)出任何元素,只有一個(gè)完成事件,則AsyncSubject也只有一個(gè)完成事件。
PublishSubject 將對(duì)觀察者發(fā)送訂閱后產(chǎn)生的元素,而在訂閱前發(fā)出的元素將不會(huì)發(fā)送給觀察者。訂閱者只能接收訂閱后的事件,適合發(fā)送新的事件 let subject = PublishSubject<String>()
ReplaySubject 將對(duì)觀察者發(fā)送全部的元素,無(wú)論觀察者是何時(shí)進(jìn)行訂閱的。 let subject = ReplaySubject<String>.create(bufferSize: 1)
當(dāng)觀察者對(duì) BehaviorSubject 進(jìn)行訂閱時(shí),它會(huì)將源 Observable 中最新的元素發(fā)送出來(lái)(如果不存在最新的元素,就發(fā)出默認(rèn)元素)。然后將隨后產(chǎn)生的元素發(fā)送出來(lái)。如果源 Observable 因?yàn)楫a(chǎn)生了一個(gè) error 事件而中止, BehaviorSubject 就不會(huì)發(fā)出任何元素,而是將這個(gè) error 事件發(fā)送出來(lái)。let subject = BehaviorSubject(value: "abc")