创建可观察量

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.
}