RXSwift之Observable

Observable的介紹

Observable作為RxSwift的基礎(chǔ),一切的根基基于此,因此,想要透徹理解RxSwift,我們也要對(duì)Observable要有一些基本的了解。

Observable<T>

1.Observable<T>這個(gè)類是RxSwift框架的基礎(chǔ),通常我們把它稱作為可觀察序列,它存在的作用就是可以異步的產(chǎn)生一系列的Event事件。
2.產(chǎn)生的這些Event事件還可以攜帶數(shù)據(jù),那么泛型<T>就是用來傳遞這個(gè)Event事件攜帶的數(shù)據(jù)的類型。
3.那么既然有了Observable可觀察序列,我們還需要一個(gè)Observer(訂閱者)來訂閱它,這樣這個(gè)訂閱者才能收到發(fā)出的Event事件

event

查看 RxSwift 源碼可以發(fā)現(xiàn),事件 Event 的定義如下:

 public enum Event<Element> {
    /// Next element is produced.
    case next(Element)

    /// Sequence terminated with an error.
    case error(Swift.Error)

    /// Sequence completed successfully.
    case completed
}

我們可以看到,Event其實(shí)就是一個(gè)枚舉,因此,可以知道Observable可以發(fā)出3種不同類型的Event事件:

nextnext事件就是通常攜帶數(shù)據(jù)<T>的事件。

1.png

errorerror事件表示一個(gè)錯(cuò)誤,它攜帶了具體錯(cuò)誤內(nèi)容,只要Observable發(fā)出了error event,Observable就會(huì)終止,不會(huì)再發(fā)出error事件了。

2.png

completedcompleted事件表示Observable發(fā)出的事件完成了,和error一樣,只要Observable發(fā)出后就終止,不在發(fā)出event事件。

3.png

Observable 與 Sequence比較

1.為更好地理解,我們可以把每一個(gè) Observable的實(shí)例想象成于一個(gè)Swift中的 Sequence

即一個(gè) Observable(ObservableType)相當(dāng)于一個(gè)序列 Sequence(SequenceType)。
ObservableType.subscribe(_:) 方法其實(shí)就相當(dāng)于 SequenceType.generate().

2.區(qū)別

Swift 中的 SequenceType 是同步的循環(huán),而 Observable 是異步的。
Observable 對(duì)象會(huì)在有任何 Event 時(shí)候,自動(dòng)將Event 作為一個(gè)參數(shù)通過 ObservableType.subscribe(_:) 發(fā)出,并不需要使用 next方法。

創(chuàng)建 Observable 序列

RxSwift為我們提供了以下幾種方法來創(chuàng)建一個(gè)Observable序列。

just()方法

1.該方法通過傳入一個(gè)默認(rèn)值來初始化,構(gòu)建一個(gè)只有一個(gè)元素的Observable隊(duì)列,訂閱完信息自動(dòng)complete
2.下面的樣例,我們顯示地標(biāo)注出了Observable的類型為Observable<Int>,即指定了這個(gè)Observable 所發(fā)出的事件攜帶的數(shù)據(jù)類型必須是 Int 類型的。

let observable = Observable<Int>.just(5)
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容