Observable的特征序列,這些特征序列可以幫助我們更準確的描述序列
Single
Single 是 Observable 的另外一個版本。不像 Observable 可以發出多個元素,它要么只能發出一個元素,要么產生一個
error
事件。
- 發出一個元素,或一個
error
事件- 不會共享狀態變化
一個比較常見的例子就是執行 HTTP 請求,然后返回一個應答或錯誤。不過你也可以用 Single 來描述任何只有一個元素的序列。
源文檔中 ,訂閱提供一個 SingleEvent 的枚舉:
public enum SingleEvent<Element> {
case success(Element)
case error(Swift.Error)
}
所以使用Rx的時候注意方法
Single_Method("hello world").subscribe(onSuccess: ((Any) -> Void)?,
onError: ((Error) -> Void)? )
Demo
//特征序列 : Single : 做網絡請求
func Single_Method(_ repo : String) -> Single<Any> {
return Single<Any>.create(subscribe: { (single) -> Disposable in
let url = URL(string: "www.baidu.com\(repo)")!
let task = URLSession.shared.dataTask(with: url, completionHandler: { (data, response, error) in
if let error = error {
single(.error(error))
return
}
guard
let data = data ,
let json = try? JSONSerialization.jsonObject(with: data, options: .mutableLeaves) ,
let result = json as? [String : Any] else {
return
}
single(.success(result))
})
task.resume()
return Disposables.create()
})
}
func Single_Use() {
Single_Method("hello world").subscribe(onSuccess: { (result) in
print(result)
}) { (error) in
print(error)
}
}
重要 : 這里唯一不好的地方是 single(.success(result)) 與 single(.error(error)),沒有語法糖提示.
Completable
Completable 是 Observable 的另外一個版本。不像 Observable 可以發出多個元素,它要么只能產生一個
completed
事件,要么產生一個error
事件。
- 發出零個元素
- 發出一個
completed
事件或者一個error
事件- 不會共享狀態變化
Completable 適用于那種你只關心任務是否完成,而不需要在意任務返回值的情況。它和 Observable<Void> 有點相似。
源文檔中 ,訂閱提供一個 CompletableEvent 的枚舉:
public enum CompletableEvent {
case error(Swift.Error)
case completed
}
//特征序列 : Completeable : 處理事件的結果.
func completeable_Method() -> Completable {
return Completable.create(subscribe: { (complete) -> Disposable in
//做一些處理,返回BOOL類型的值 , 假設有個屬性completeFlag為true
let success = self.completeFlag
if success == false {
complete(.error(self.error!))
} else {
complete(.completed)
}
return Disposables.create()
})
}
func complete_Use() {
completeable_Method().subscribe(onCompleted: {
print("complete")
}) { (error) in
print(error)
}
}
看了前面兩個,下面三個大概也知道具體的操作了.模板基本一致.注意的是:
- Event 的枚舉
- Event 的調用(沒有語法糖提示)
- 每個方法最后return Disposables.create() (這個接下來了解)
- 通過rx的方式調用用法的時候注意選擇subscribe的方法,對應Event 的枚舉
Maybe
Maybe 是
Observable
的另外一個版本。它介于 Single 和 Completable 之間,它要么只能發出一個元素,要么產生一個completed
事件,要么產生一個error
事件。
- 發出一個元素或者一個
completed
事件或者一個error
事件- 不會共享狀態變化
如果你遇到那種可能需要發出一個元素,又可能不需要發出時,就可以使用 Maybe。
Driver
Driver是一個精心準備的特征序列。它主要是為了簡化 UI 層的代碼。不過如果你遇到的序列具有以下特征,你也可以使用它:
- 不會產生
error
事件- 一定在 MainScheduler 監聽(主線程監聽)
- 共享狀態變化
這些都是驅動 UI 的序列所具有的特征。
ControlEvent (文檔里面沒有具體的介紹)
ControlEvent 專門用于描述 UI 控件所產生的事件,它具有以下特征:
- 不會產生
error
事件- 一定在 MainScheduler 訂閱(主線程訂閱)
- 一定在 MainScheduler 監聽(主線程監聽)
共享狀態變化