觀察者是用來監聽序列,當收到事件作出響應。
建立觀察者
對一個 Observable
進行 subscribe
。事件發生時於後面的 onNext
、onError
、onCompleted
作出響應。
tap.subscribe(onNext: { [weak self] in
self?.showAlert()
}, onError: { error in
print("發生錯誤: \(error.localizedDescription)")
}, onCompleted: {
print("完成任務")
})
AnyObserver
AnyObserver
可以用來描述任意一種觀察者。
範例:印出網路請求結果
URLSession.shared.rx.data(request: URLRequest(url: url))
.subscribe(onNext: { data in
print("Data Task Success with count: \(data.count)")
}, onError: { error in
print("Data Task Error: \(error)")
})
.disposed(by: disposeBag)
可以改寫為
let observer: AnyObserver<Data> = AnyObserver { (event) in
switch event {
case .next(let data):
print("Data Task Success with count: \(data.count)")
case .error(let error):
print("Data Task Error: \(error)")
default:
break
}
}
URLSession.shared.rx.data(request: URLRequest(url: url))
.subscribe(observer)
.disposed(by: disposeBag)
Binder
Binder
不會處理錯誤事件- 確保綁定都是在給定的
Scheduler
上執行 (默認為 MainScheduler)
範例:
這是一個UI觀察者,在響應事件時只會處理 next
事件,且需要在主執行緒更新 UI 的操作。
let observer: AnyObserver<Bool> = AnyObserver { [weak self] (event) in
switch event {
case .next(let isHidden):
self?.usernameValidOutlet.isHidden = isHidden
default:
break
}
}
usernameValid
.bind(to: observer)
.disposed(by: disposeBag)