RxSwift之AnyObserver、Binder
Observer
观察者Observer
的作用就是监听事件,然后对这个事件作出响应。任何响应事件的行为都是观察者。
比如,点击按钮后弹出一个提示框,那么“弹出一个提示框”就是观察者。
创建观察者
在
subscribe
方法中创建1
2
3
4
5
6
7
8let observable = Observable.of("A","B","C")
observable.subscribe( onNext: { element in
print(element)
}, onError: { error in
print(error)
}, onCompleted: {
print("completed")
})在
bind
方法中创建1
2
3
4
5
6
7
8let disposeBag = DisposeBag()
let observable = Observable<Int>.interval(1, scheduler: MainScheduler.instance)
observable
.map { "当前索引数:\($0)"}
.bind { [weak self](text) in
self?.label.text = text
}
.disposed(by:disposeBag)使用
AnyObserver
创建,配合subscribe
或者bindTo
1
2
3
4
5
6
7
8
9
10
11
12
13
14// 配合subscribe
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)1
2
3
4
5
6
7
8
9
10
11
12
13
14// 配合bindTo
let disposeBag = DisposeBag()
let observer:AnyObserver<String> = AnyObserver { [weak self] event in
switch event {
case .next(let text):
self?.label.text = text
default: break
}
}
let observable = Observer<Int>.interval(1, scheduler:MainScheduler.instance)
observable
.map { "当前索引数:\($0)"}
.bind(to:observer)
.disposed(by: disposeBag)使用
Binder
使用
Binder
创建观察者,相较于AnyObserver
的大而全,Binder
更专注于特定的场景。它不处理错误事件,并确保绑定都是在给定Scheduler
上执行(默认MainScheduler
)。一旦产生错误事件,在调试环境下将执行fatalError
,在发布环境下将打印错误信息。1
2
3
4
5
6
7
8
9
10let disposeBag = DisposeBag()
let observer:Binder<String> = Binder(label) { view,text in
// 将收到的索引数显示到label上
view.text = text
}
let observable = Observable<Int>.interval(1, scheduler:MainScheduler.instance)
observable
.map{ "当前索引数:\($0)"}
.bind(to:observer)
.disposed(by:disposeBag)