美文网首页
观察者: AnyObserver、Binder

观察者: AnyObserver、Binder

作者: FallPine | 来源:发表于2018-09-03 18:03 被阅读9次

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

  • 当我们点击按钮,弹出一个提示框。那么这个“弹出一个提示框”就是观察者 Observer<Void>
  • 当我们请求一个远程的 json 数据后,将其打印出来。那么这个“打印 json 数据”就是观察者 Observer<JSON>
  • subscribe订阅观察者序列时,block就是对应的观察者
let observable = Observable.of("A", "B", "C")
          
observable.subscribe(onNext: { element in
    print(element)
}, onError: { error in
    print(error)
}, onCompleted: {
    print("completed")
})
  • bind 方法创建观察者
//Observable序列(每隔1秒钟发出一个索引数)
let observable = Observable<Int>.interval(1, scheduler: MainScheduler.instance)
 
observable
    .map { "当前索引数:\($0 )"}
    .bind { [weak self](text) in
         //收到发出的索引数后显示到label上
        self?.label.text = text
    }
    .disposed(by: disposeBag)
  • AnyObserver 创建观察者

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).disposed(by: disposeBag)
  • bindTo 方法创建观察者
//观察者
let observer: AnyObserver<String> = AnyObserver { [weak self] (event) in
    switch event {
    case .next(let text):
        //收到发出的索引数后显示到label上
        self?.label.text = text
    default:
        break
    }
}
         
//Observable序列(每隔1秒钟发出一个索引数)
let observable = Observable<Int>.interval(1, scheduler: MainScheduler.instance)
observable
    .map { "当前索引数:\($0 )"}
    .bind(to: observer)
    .disposed(by: disposeBag)
  • Binder 创建观察者:不会处理错误事件,并且确保绑定都是在给定 Scheduler 上执行(默认 MainScheduler),一旦产生错误事件,在调试环境下将执行 fatalError,在发布环境下将打印错误信息
@IBOutlet weak var label: UILabel!
     
let disposeBag = DisposeBag()
     
override func viewDidLoad() {
                 
    //观察者
    let observer: Binder<String> = Binder(label) { (lab, text) in
        //收到发出的索引数后显示到label上
        lab.text = text
    }
         
    //Observable序列(每隔1秒钟发出一个索引数)
    let observable = Observable<Int>.interval(1, scheduler: MainScheduler.instance)
    observable
        .map { "当前索引数:\($0 )"}
        .bind(to: observer)
        .disposed(by: disposeBag)
}

参考文章:Swift - RxSwift的使用详解5(观察者1: AnyObserver、Binder)

相关文章

  • Swift RxSwift专题 : Observer - 观察者

    AnyObserver AnyObserver 可以用来描叙任意一种观察者。 Binder Binder 主要有以...

  • RxSwift - 特征观察者

    和 Observable 一样,观察者也存特征观察者,例如: ·Binder AnyObserver AnyObs...

  • RxSwift-1- Observer

    AnyObserver -任意类型观察者 Binder -特定观察者比如UI观察者-不会处理错误事件-确保绑定都是...

  • 观察者: AnyObserver、Binder

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

  • 观察者

    一、创建观察者Observer 使用subscribe来创建观察者 二、AnyObserver任意观察者 A...

  • 【RXSwift】系列二 :Observer创建

    Observer创建 观察者 是用来监听事件,然后它需要这个事件做出响应 常见观察者 AnyObserver - ...

  • Android Binder学习笔记(二)

    Android Binder学习笔记(一)接上篇添加图书和获取图书列表的例子。 向服务端注册成为观察者 我们希望每...

  • Binder驱动

    数据结构 binder_proc binder_thread binder_transaction binder_...

  • Android Binder

    Binder Binder是什么? Binder是一种进程间通信机制为什么是Binder? Binder架构 Bi...

  • Android framework学习索引

    binder基础 启动流程要求对于binder机制有了解,要有binder的学习基础binder机制https:/...

网友评论

      本文标题:观察者: AnyObserver、Binder

      本文链接:https://www.haomeiwen.com/subject/fojiwftx.html