觀察者(Observer)的作用就是監(jiān)聽事件,然后對這個(gè)事件做出響應(yīng)凤粗∷址海或者說任何響應(yīng)事件的行為都是觀察者。比如:
- 當(dāng)我們點(diǎn)擊按鈕嫌拣,彈出一個(gè)提示框柔袁。那么這個(gè)“彈出一個(gè)提示框”就是觀察者 Observer<Void>
- 當(dāng)我們請求一個(gè)遠(yuǎn)程的 json 數(shù)據(jù)后,將其打印出來亭罪。那么這個(gè)“打印 json 數(shù)據(jù)”就是觀察者 Observer<JSON>
-
subscribe訂閱觀察者序列時(shí)瘦馍,block就是對應(yīng)的觀察者
let observable = Observable.of("A", "B", "C")
observable.subscribe(onNext: { element in
print(element)
}, onError: { error in
print(error)
}, onCompleted: {
print("completed")
})
-
bind 方法創(chuàng)建觀察者
//Observable序列(每隔1秒鐘發(fā)出一個(gè)索引數(shù))
let observable = Observable<Int>.interval(1, scheduler: MainScheduler.instance)
observable
.map { "當(dāng)前索引數(shù):\($0 )"}
.bind { [weak self](text) in
//收到發(fā)出的索引數(shù)后顯示到label上
self?.label.text = text
}
.disposed(by: disposeBag)
-
AnyObserver 創(chuàng)建觀察者
AnyObserver 可以用來描敘任意一種觀察者
//觀察者
let observer: AnyObserver<String> = AnyObserver { (event) in
switch event {
case .next(let data):
print(data)
case .error(let error):
print(error)
case .completed:
print("completed")
}
}
let observable = Observable.of("A", "B", "C")
observable.subscribe(observer).disposed(by: disposeBag)
-
bindTo 方法創(chuàng)建觀察者
//觀察者
let observer: AnyObserver<String> = AnyObserver { [weak self] (event) in
switch event {
case .next(let text):
//收到發(fā)出的索引數(shù)后顯示到label上
self?.label.text = text
default:
break
}
}
//Observable序列(每隔1秒鐘發(fā)出一個(gè)索引數(shù))
let observable = Observable<Int>.interval(1, scheduler: MainScheduler.instance)
observable
.map { "當(dāng)前索引數(shù):\($0 )"}
.bind(to: observer)
.disposed(by: disposeBag)
-
Binder 創(chuàng)建觀察者:不會(huì)處理錯(cuò)誤事件,并且確保綁定都是在給定 Scheduler 上執(zhí)行(默認(rèn) MainScheduler)应役,一旦產(chǎn)生錯(cuò)誤事件情组,在調(diào)試環(huán)境下將執(zhí)行 fatalError燥筷,在發(fā)布環(huán)境下將打印錯(cuò)誤信息
@IBOutlet weak var label: UILabel!
let disposeBag = DisposeBag()
override func viewDidLoad() {
//觀察者
let observer: Binder<String> = Binder(label) { (lab, text) in
//收到發(fā)出的索引數(shù)后顯示到label上
lab.text = text
}
//Observable序列(每隔1秒鐘發(fā)出一個(gè)索引數(shù))
let observable = Observable<Int>.interval(1, scheduler: MainScheduler.instance)
observable
.map { "當(dāng)前索引數(shù):\($0 )"}
.bind(to: observer)
.disposed(by: disposeBag)
}