RxSwift_03_观察者

2021-03-05  本文已影响0人  MR_詹

观察者(Observer)
观察者的作用就是监听事件,然后对这个事件作出响应。或者说任何响应事件的行为都是观察者

观察者的创建

(1)在subscribe方法中创建

创建观察者最直接的方法就是在Observablesubscribe方法后面描述当前事件发生时,需要如何做出响应
观察者就是由后面的onNextonErroronCompleted这些闭包构建出来的

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)
    }
}
上一篇 下一篇

猜你喜欢

热点阅读