RxSwift笔记 - Observable 和 Observer

原文链接:[https://www.jianshu.com/p/f61a5a988590], 此文为笔记整理,感谢原作者

1.可观察序列Observable

Observable这个类我们可以称它为可观察序列。它会异步地产生一系列的 Event(事件),即一个Observable对象会随着时间推移不定期地发出 event(element : T)这样一个东西。

事件Event定义如下:

public enum Event {
    /// Next element is produced.
    case next(Element)
 
    /// Sequence terminated with an error.
    case error(Swift.Error)
 
    /// Sequence completed successfully.
    case completed
}
1.1创建Observable方式:
  • just()方法该方法通过传入一个默认值来初始化Observable.just(5)
  • of()该方法可以接受可变数量的参数(必需要是同类型的)Observable.of("A", "B", "C")
  • from()该方法需要一个数组参数Observable.from(["A", "B", "C"])
  • empty()该方法创建一个空内容的Observable 序列
  • never()该方法创建一个永远不会发出 Event(也不会终止)的 Observable 序列
  • error()该方法创建一个不做任何操作,而是直接发送一个错误的 Observable 序列。
  • range()该方法通过指定起始和结束数值,创建一个以这个范围内所有值作为初始值的Observable序列。
  • repeatElement()该方法创建一个可以无限发出给定元素的EventObservable序列(永不终止)。
    *generate()该方法创建一个只有当提供的所有的判断条件都为 true的时候,才会给出动作的 Observable序列。
  • create() 该方法接受一个block形式的参数,任务是对每一个过来的订阅进行处理。
  • deferred()该个方法相当于是创建一个 Observable工厂,通过传入一个block来执行延迟 Observable序列创建的行为,而这个block里就是真正的实例化序列对象的地方。
    *interval()这个方法创建的 Observable序列每隔一段设定的时间,会发出一个索引数的元素。而且它会一直发送下去。
  • timer()这个方法有两种用法,一种是创建的 Observable序列在经过设定的一段时间后,产生唯一的一个元素。
1.2订阅Observable
  • 使用subscribe()订阅得到event事件
  • 使用subscribe()方法的 onNextonErroronCompletedonDisposed进行分类订阅得到解包的数据
  • 使用doOn可以分别对subscribe()NextErrorCompleted等进行监听

2.观察者Observer

创建方式:

  • 在可观察序列的subscribe方法中创建
observable.subscribe(onNext: { element in
    print(element)
})
  • bind 方法中创建
observable
            .map { "当前索引数:\($0 )"}
            .bind { [weak self](text) in
                //收到发出的索引数后显示到label上
                self?.label.text = text
            }
            .disposed(by: disposeBag)
  • 使用AnyObserver创建观察者
let observer: AnyObserver = 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)
  • 配合 bindTo 方法使用
 observable
            .map { "当前索引数:\($0 )"}
            .bind(to: observer)
            .disposed(by: disposeBag)
  • 使用Binder创建观察者
    Binder主要有以下特征:
    1. 不会处理错误事件
    2. 确保绑定都是在给定 Scheduler 上执行(默认 MainScheduler)
    3. 一旦产生错误事件,在调试环境下将执行 fatalError,在发布环境下将打印错误信息
        //观察者
        let observer: Binder = Binder(label) { (view, text) in
            //收到发出的索引数后显示到label上
            view.text = text
        }
         
        //Observable序列
        observable
            .map { "当前索引数:\($0 )"}
            .bind(to: observer)
            .disposed(by: disposeBag)


练习Demo:包括语法和MVVM https://github.com/3KK3/RxSwiftDemo

你可能感兴趣的:(RxSwift笔记 - Observable 和 Observer)