注意:使用本例中的代碼首先應該導入頭文件鲤孵,代碼如下:
import RxSwift
創(chuàng)建和訂閱 Observable
s
這里有以下幾種方法來創(chuàng)建和訂閱Observable
序列。
never
創(chuàng)建一個不會終止和不會發(fā)出任何事件的序列结胀。了解更多
example("never") {
let disposeBag = DisposeBag()
let neverSequence = Observable<String>.never()
let neverSequenceSubscription = neverSequence
.subscribe { _ in
print("This will never be printed")
}
neverSequenceSubscription.disposed(by: disposeBag)
}
Debug Area 輸出:
--- never example ---
empty
創(chuàng)建一個空的Observable
序列赞咙,這個序列僅僅只發(fā)出一個 Completed 事件。了解更多
example("empty") {
let disposeBag = DisposeBag()
Observable<Int>.empty()
.subscribe { event in
print(event)
}
.disposed(by: disposeBag)
}
Debug Area 輸出:
--- empty example ---
completed
注意:這個例子還介紹了創(chuàng)建和訂閱一個Observable
序列怎樣連接在一起使用糟港。
just
創(chuàng)建僅有一個元素的Observable
序列攀操。?了解更多
example("just") {
let disposeBag = DisposeBag()
Observable.just("??")
.subscribe { event in
print(event)
}
.disposed(by: disposeBag)
}
Debug Area 輸出:
--- just example ---
next(??)
completed
of
創(chuàng)建具有固定數(shù)量元素(參數(shù))的Observable
序列。
example("of") {
let disposeBag = DisposeBag()
Observable.of("??", "??", "??", "??")
.subscribe(onNext: { element in
print(element)
})
.disposed(by: disposeBag)
}
Debug Area 輸出:
--- of example ---
??
??
??
??
Tips:這個例子還介紹了怎樣使用subscribe(onNext:)
便利方法秸抚。與subscribe(_:)
不同的是速和,subscribe(_:)
方法給所有的事件類型 (Next, Error, Completed) 訂閱了一個event(事件)處理者,而subscribe(onNext:)
方法則訂閱了一個element(元素)處理者剥汤,這個element(元素)處理者將會忽略 Error 和 Completed 事件并且只產(chǎn)生 Next 事件元素颠放。還有subscribe(onError:)
和subscribe(onCompleted:)
便利方法,只要你想訂閱這些事件類型吭敢。而且還有一個subscribe(onNext:onError:onCompleted:onDisposed:)
方法碰凶,它允許你對一個或多個事件類型做出反應,而且在單獨調(diào)用時當因為任何原因,或者被處理欲低,訂閱會被終止:
someObservable.subscribe(
onNext: { print("Element:", $0) },
onError: { print("Error:", $0) },
onCompleted: { print("Completed") },
onDisposed: { print("Disposed") }
)
from
使用一個Sequence
類型的對象創(chuàng)建一個Observable
序列辕宏,比如一個Array
,Dictionary
砾莱,或者Set
匾效。
example("from") {
let disposeBag = DisposeBag()
Observable.from(["??", "??", "??", "??"])
.subscribe(onNext: { print($0) })
.disposed(by: disposeBag)
}
Debug Area 輸出:
--- from example ---
??
??
??
??
注意:這個例子還演示了怎樣使用默認參數(shù)名
$0
代替顯示命名參數(shù)。
create
創(chuàng)建一個自定義的Observable
序列恤磷。了解更多
example("create") {
let disposeBag = DisposeBag()
let myJust = { (element: String) -> Observable<String> in
return Observable.create { observer in
observer.on(.next(element))
observer.on(.completed)
return Disposables.create()
}
}
myJust("??")
.subscribe { print($0) }
.disposed(by: disposeBag)
}
Debug Area 輸出:
--- create example ---
next(??)
completed
range
創(chuàng)建一個在一定范圍發(fā)出一系列連續(xù)的整數(shù)序列然后終止的Observable
序列面哼。了解更多
example("range") {
let disposeBag = DisposeBag()
Observable.range(start: 1, count: 10)
.subscribe { print($0) }
.disposed(by: disposeBag)
}
Debug Area 輸出:
--- range example ---
next(1)
next(2)
next(3)
next(4)
next(5)
next(6)
next(7)
next(8)
next(9)
next(10)
completed
repeatElement
創(chuàng)建一個不確定次數(shù)地發(fā)出指定元素的Observable
序列。了解更多
example("repeatElement") {
let disposeBag = DisposeBag()
Observable.repeatElement("??")
.take(3)
.subscribe(onNext: { print($0) })
.disposed(by: disposeBag)
}
Debug Area 輸出:
--- repeatElement example ---
??
??
??
注意:這個例子還介紹了使用take
操作從一個序列開始到?指定數(shù)量的元素扫步。
generate
創(chuàng)建一個只要條件的值為true
就生成值的Observable
序列魔策。
example("generate") {
let disposeBag = DisposeBag()
Observable.generate(
initialState: 0,
condition: { $0 < 3 },
iterate: { $0 + 1 }
)
.subscribe (onNext: { print($0) })
.disposed(by: disposeBag)
}
Debug Area 輸出:
--- generate example ---
0
1
2
deferred
為每一個訂閱者創(chuàng)建一個新的Observable
序列。了解更多
example("deferred") {
let disposeBag = DisposeBag()
var count = 1
let deferredSequence = Observable<String>.deferred {
print("Creating \(count)")
count += 1
return Observable.create { observer in
print("Emitting...")
observer.onNext("??")
observer.onNext("??")
observer.onNext("??")
return Disposables.create()
}
}
deferredSequence
.subscribe(onNext: { print($0) })
.disposed(by: disposeBag)
deferredSequence
.subscribe(onNext: { print($0) })
.disposed(by: disposeBag)
}
Debug Area 輸出:
--- deferred example ---
Creating 1
Emitting...
??
??
??
Creating 2
Emitting...
??
??
??
error
創(chuàng)建一個不會發(fā)散出任何事件或元素并且遇到錯誤就會立即終止的Observable
序列河胎。
example("error") {
let disposeBag = DisposeBag()
Observable<Int>.error(TestError.test)
.subscribe { print($0) }
.disposed(by: disposeBag)
}
Debug Area 輸出:
--- error example ---
error(test)
doOn
為每一個被發(fā)出的事件調(diào)用一個附帶動作并且返回(通過)最初的事件闯袒。了解更多
example("doOn") {
let disposeBag = DisposeBag()
Observable.of("??", "??", "??", "??")
.do(
onNext: { print("Intercepted", $0) },
onError: { print("Intercepted error:", error) },
onCompleted: { print("Completed") }
)
.subscribe(onNext: { print($0) })
.disposed(by: disposeBag)
}
Debug Area 輸出:
--- doOn example ---
Intercepted: ??
??
Intercepted: ??
??
Intercepted: ??
??
Intercepted: ??
??
Completed
注意:還有doOnNext(_:)
,doOnError(_:)
,和doOnCompleted(_:)
攔截特定事件的便利方法,而且doOn(onNext:onError:onCompleted)
方法在單獨調(diào)用時可以攔截一個或多個事件游岳。