Creating Observer

Observer

Observer role is to listen for events and then respond to this incident, or any behavior response time is an observer

1. Create a listener in subscribe () method

  • The most direct way is to create an observer at Observablethe subscribe()time of the event described method occurs later, you need to how to respond
let observable1 = Observable.of("A", "B", "C", "D")
observable1.subscribe(onNext: { element in
    print(element)
}, onError: { error in
    print(error)
}, onCompleted: {
    print("completed")
}).disposed(by: bag)

2. Create the bind () method

let observable = Observable<Int>.interval(1, scheduler: MainScheduler.instance)

observable.map { "索引: \($0)" }.bind { self.label.text = $0 }.disposed(by: bag)

3. Use the viewer to create AnyObserver

  • AnyObserver can be used to describe any of a viewer
let observer3: AnyObserver<String> = AnyObserver { (event) in
    switch event {
    case .next(let data):
        print(data)
    case .error(let error):
        print(error)
    case .completed:
        print("completed")
    }
}
let observable3 = Observable.of("A", "B", "C", "D")
observable3.subscribe(observer3).disposed(by: bag)
  • With bindTo method
let observer31: AnyObserver<String> = AnyObserver { (event) in
    switch event {
    case .next(let text):
        self.label.text = text
    default:
        break
    }
}
let observable31 = Observable<Int>.interval(1, scheduler: MainScheduler.instance)
observable31.map { "当前索引: \($0)" }.bind(to: observer31).disposed(by: bag)

4. Create a Binder observer

  • Compared to the large and AnyObserver, Binder focus more on a particular scene. Binder There are two major characteristics
    • Feature 1: does not handle error events
    • Feature 2: Make sure the bindings are executed (default MainSchedule) on a given Schedule
  • Once the error event, in debug environment will perform fatalError, an error message will be printed in a publishing environment
  • Sample sequence number displayed in the text label label display is a typical UI observer, who in response to an event, it will only deal with next event, and the UI update operations need to be performed on the main thread on it. So this case better solution is to use Binder
let observer4: Binder<String> = Binder(label) { (view, text) in
    view.text = text
}
let observable4 = Observable<Int>.interval(1, scheduler: MainScheduler.instance)
observable4.map{ "索引显示: \($0)" }.bind(to: observer4).disposed(by: bag)

Guess you like

Origin www.cnblogs.com/gchlcc/p/11820441.html