函數響應式編程框架RxSwift 學習——Subject

上一篇寫了Observable,這篇文章接著趁熱打鐵把Subject寫了。

關于Subject的定義,在RxSwift的文檔中它是這樣說的

A Subject is a sort of bridge or proxy that is available in some implementations of ReactiveX that acts both as an observer and as an Observable. Because it is an observer, it can subscribe to one or more Observables, and because it is an Observable, it can pass through the items it observes by reemitting them, and it can also emit new items.

簡單的比喻下,Observable像是一個水管,會源源不斷的有水冒出來。Subject就像一個水龍頭,它可以套在水管上,接受Observable上面的事件。但是作為水龍頭,它下面還可以被別的observer給subscribe了。

在RxSwift中,主要有三類Subject:

PublishSubject

它僅僅會發送observer訂閱之后的事件,也就是說如果sequence上有.Next 的到來,但是這個時候某個observer還沒有subscribe它,這個observer就收不到這條信息,它只會收到它訂閱之后發生的事件。

ReplaySubject

它和PublishSubject不同之處在于它不會漏消息。即使observer在subscribe的時候已經有事件發生過了,它也會收到之前的事件序列。

BehaviorSubject

當有observer在訂閱一個BehaviorSubject的時候,它首先將會收到Observable上最近發送一個信號(或者是默認值),接著才會收到Observable上會發送的序列。

Variable

Variable是BehaviorSubject的封裝,它和BehaviorSubject不同之處在于,不能向Variable發送.Complete.Error,它會在生命周期結束被釋放的時候自動發送.Complete

在我上一篇文章中,說到了一個比較常見的一個應用場景,就是tableview滑動加載更多的數據。在這里tableview滑動事件是一個Observable的(RxCocoa提供相應支持), 我的page是一個Variable<Int>類型的屬性,它可以訂閱tableview上是否需要更改頁碼,然后page又被負責API請求的對象給訂閱了,從而當page變化的同時開始自動請求數據。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容