观察者(Observer)
观察者的作用就是监听事件,然后对这个事件作出响应。或者说任何响应事件的行为都是观察者
观察者的创建
(1)在
subscribe
方法中创建
创建观察者最直接的方法就是在Observable
的subscribe
方法后面描述当前事件发生时,需要如何做出响应
观察者就是由后面的onNext
,onError
,onCompleted
这些闭包构建出来的
let observable = Observable.of("A", "B", "C")
observable.subscribe(onNext: { element in
print(element)
}, onError: { error in
print(error)
}, onCompleted: {
print("completed")
})
(2)在
bind
方法中创建
let observable = Observable<Int>.interval(.seconds(1), scheduler: MainScheduler.instance)
observable.map {
"当前时间:\($0)s"
}
.bind {(text) in
print(text)
}
.disposed(by: bag)
(3)使用
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)
(4)使用
Binder
创建
相较于AnyObserver的大而全,Binder
更专注于特定的场景。
Binder主要有以下两个特征
不会处理错误事件
确保绑定都是在给定Scheduler上执行(默认是在MainSchedule)
import UIKit
import RxSwift
import RxCocoa
class ViewController: UIViewController {
@IBOutlet weak var label: UILabel!
let disposeBag = DisposeBag()
override func viewDidLoad() {
//观察者
let observer: Binder<String> = Binder(label) { (view, text) in
//收到发出的索引数后显示到label上
view.text = text
}
//Observable序列(每隔1秒钟发出一个索引数)
let observable = Observable<Int>.interval(1, scheduler: MainScheduler.instance)
observable
.map { "当前索引数:\($0 )"}
.bind(to: observer)
.disposed(by: disposeBag)
}
}
网友评论