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事件:
next:next事件就是通常攜帶數(shù)據(jù)<T>的事件。
1.png
error:error事件表示一個(gè)錯(cuò)誤,它攜帶了具體錯(cuò)誤內(nèi)容,只要Observable發(fā)出了error event,Observable就會(huì)終止,不會(huì)再發(fā)出error事件了。
2.png
completed:completed事件表示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)


