建立可觀察量

RxSwift 提供了許多建立 Observable 的方法,讓我們來看看:

import RxSwift

let intObservale = Observable.just(123) // Observable<Int>
let stringObservale = Observable.just("RxSwift") // Observable<String>
let doubleObservale = Observable.just(3.14) // Observable<Double>

因此,建立了可觀察量。它們只保留一個值,然後成功終止。然而,它建立後沒有任何事情發生。為什麼?

使用 Observables 有兩個步驟:你觀察一些東西來建立一個流然後你訂閱流或繫結到與它互動的東西。

Observable.just(12).subscribe {
    print($0)
}

控制檯將列印:

.Next(12)
.Completed()

如果我只對使用 .Next 事件的資料感興趣,我會使用 subscribeNext 運算子:

Observable.just(12).subscribeNext {
    print($0) // prints "12" now
}

如果我想建立一個可觀察的許多值,我使用不同的運算子:

Observable.of(1,2,3,4,5).subscribeNext {
    print($0)
}
// 1
// 2
// 3
// 4
// 5

// I can represent existing data types as Observables also:
[1,2,3,4,5].asObservable().subscribeNext { 
    print($0) 
}
// result is the same as before.

最後,也許我想要一個做一些工作的 Observable。例如,將網路操作包裝到 Observable<SomeResultType> 中很方便。讓我們來看看有人能做到這一點:

Observable.create { observer in    // create an Observable ...
    MyNetworkService.doSomeWorkWithCompletion { (result, error) in
        if let e = error {
            observer.onError(e)    // ..that either holds an error
        } else {
            observer.onNext(result) // ..or emits the data
            observer.onCompleted()  // ..and terminates successfully.
        }
    }
    return NopDisposable.instance // here you can manually free any resources
                                //in case if this observable is being disposed.
}