美文网首页
RxSwift_03_观察者

RxSwift_03_观察者

作者: MR_詹 | 来源:发表于2021-03-05 10:50 被阅读0次

观察者(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)
    }
}

相关文章

  • RxSwift_03_观察者

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

  • 前端面试考点之手写系列

    1、观察者模式 观察者模式(基于发布订阅模式) 有观察者,也有被观察者。 观察者需要放到被观察者列表中,被观察者的...

  • 观察者模式

    观察者模式,包括观察者和被观察者。观察者们将自己的需求告知被观察者,被观察者负责通知到观察者。 一、Java自带的...

  • 设计模式(三行为模式)

    观察者模式 构成 抽象被观察者 + 具体被观察者 + 抽象观察者 + 具体观察者 定义 被观察者具有修改观察列表 ...

  • Laravel5.8 模型事件与 Observer

    Observer 观察者模式创建步骤 观察者监听多个事件观察者 注册观察者注册观察者 观察者中事件的发生顺序 la...

  • PHP设计模式-观察者

    适用性 观察者观察被观察者,被观察者通知观察者 代码示例 /** * 观察者接口 */ interface Obs...

  • RxJava 原理篇

    一、框架思想 观察者模式观察者自下而上注入被观察者被观察者自上而下发射事件观察者模式 装饰器模式自上而下,被观察者...

  • java观察者模式

    案例: 定义被观察者 定义观察者 调用 优点 观察者和被观察者之间抽象耦合。观察者模式容易扩展,被观察者只持有观察...

  • RxJava 再 "用力" 一点点

    RxJava 里面采用了观察者的设计模式,因此存在观察者与被观察者,被观察者发送消息通知观察者,观察者接收到消息更...

  • RXJava

    传统的观察者模式 RxJava 四个要素 被观察者 观察者 订阅 事件 创建被观察者subscriber就是观察者...

网友评论

      本文标题:RxSwift_03_观察者

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