zoukankan      html  css  js  c++  java
  • 创建Observer

    观察者

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

    1. 在subscribe()方法中创建监听者

    • 创建观察者最直接的方法就是在Observablesubscribe()方法后面描述事件发生时, 需要如何做出响应
    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. 在bind()方法中创建

    let observable = Observable<Int>.interval(1, scheduler: MainScheduler.instance)
    
    observable.map { "索引: ($0)" }.bind { self.label.text = $0 }.disposed(by: bag)
    

    3. 使用AnyObserver来创建观察者

    • AnyObserver可以用来描述任意一种观察者
    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)
    
    • 配合bindTo方法使用
    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. 使用Binder创建观察者

    • 相较于AnyObserver的大而全, Binder更专注于特定的场景. Binder主要有以下两个特征
      • 特征1: 不会处理错误事件
      • 特征2: 确保绑定都是在给定Schedule上执行(默认MainSchedule)
    • 一旦发生错误事件, 在调试环境下将执行fatalError, 在发布环境下将打印错误信息
    • 在上面序列数显示样例中, label标签的文字显示就是一个典型的UI观察者.他在响应事件时, 只会处理next事件, 而且更新UI的操作需要在主线程上执行. 那么这种情况更好的方案就是使用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)
    
  • 相关阅读:
    后期生成事件命令copy /y
    SevenZipShaper压缩类
    vs2017
    WCF路由服务
    微服务--
    各种流程图的绘画网路工具 processon
    ROC 准确率,召回率 F-measure理解(转载)
    Unix OpenCV安装
    转载:tar 解压缩命令~
    cppreference经验总结
  • 原文地址:https://www.cnblogs.com/gchlcc/p/11820441.html
Copyright © 2011-2022 走看看