神刀安全网

RxSwift—Observable介绍、创建可观察序列

目前正在入门RxSwift,这是我的笔记>>>,按照课时整理,与大家共同进步。

1,Observable<T>

  • Observable<T> 这个类就是 Rx 框架的基础,我们可以称它为可观察序列。它的作用就是可以异步地产生一系列的 Event(事件),即一个 Observable<T> 对象会随着时间推移不定期地发出 event(element : T) 这样一个东西。
  • 而且这些 Event 还可以携带数据,它的泛型 <T> 就是用来指定这个 Event 携带的数据的类型。
  • 有了可观察序列,我们还需要有一个 Observer(订阅者)来订阅它,这样这个订阅者才能收到 Observable<T> 不时发出的 Event。

2,Event

查看 RxSwift 源码可以发现,事件 Event 的定义如下:

public enum Event<Element> {     /// Next element is produced.     case next(Element)       /// Sequence terminated with an error.     case error(Swift.Error)       /// Sequence completed successfully.     case completed } 

可以看到 Event 就是一个枚举,也就是说一个 Observable 是可以发出 3 种不同类型的 Event 事件:

3,创建Observable

    //just()     let observable1 = Observable.just(5)          //of()     //该方法接收可变的参数,但是参数的类型必须相同     //虽然没显示地说明类型,但是swift也会自动推断类型     let observable2 = Observable.of("A", "B", "C")          //from()     //改方法需要接收一个数组类型的参数     //效果和上面的of相同     let observable3 = Observable.from(["A", "B", "C"])          //empty()     //创建一个空的observable序列     let observable4 = Observable<Int>.empty()          //never()     //创建一个永远不会停止发出Event的observable序列     let observable5 = Observable<Int>.never()          //error()     //创建一个不会做任何操作,而是直接发送一个错误的observable序列     enum MyError: Error {         case A         case B     }     let observable6 = Observable<Int>.error(MyError.A)          //range()     //下面两个样例的结果相同     let observable7 = Observable.range(start: 1, count: 5)     let observable8 = Observable.of(1,2,3,4,5)          //repeatElement()     //创建一个可以无限发出给定元素的observable序列     let observable9 = Observable.repeatElement(1)          //generate()     //创建一个只有当所有条件都为true的时候才会给出动作的observable序列     //下面两个样例的结果相同     let observable10 = Observable.generate(initialState: 0, condition: {$0<=10}, iterate: {$0+2})     let observable11 = Observable.of(0,2,4,6,8,10)          //create()     //该方法接收一个block形式的参数,对每一个过来的订阅者进行处理     let observable12 = Observable<String>.create {observer in         //对订阅者发出next事件,且携带一个数据hello world         observer.onNext("hello world")         //对订阅者发出.complated事件         observer.onCompleted()         //一个订阅者会有一个Disposable类型的返回值,所以结尾要return一个Disposable         return Disposables.create()     }     //测试订阅     observable12.subscribe {         print($0)     }          //deferred()     //创建一个observable工厂,通过传入一个block来执行延迟observable序列的创建行为,而这个block里就是真正的实例化序列的对象的地方。     var isOdd = true          let factory = Observable<Int>.deferred {         isOdd = !isOdd                  if isOdd {             return Observable.of(1,3,5,7)         }else {             return Observable.of(2,4,6,8)         }     }     //第一次订阅测试     factory.subscribe { (event) in         print("/(isOdd)", event)     }     //第二次订阅测试     factory.subscribe { (event) in         print("/(isOdd)", event)     }          //interval()     //创建的observable序列每隔一段时间会发出一个索引数的元素,而且会一直发送下去     //下面方法每隔1秒发送一次,并且在主线程     let observable13 = Observable<Int>.interval(1, scheduler: MainScheduler.instance)     observable13.subscribe { (event) in         print(event)     }          //timer()     //5秒后发出唯一一个元素0     let observable14 = Observable<Int>.timer(5, scheduler: MainScheduler.instance)     observable14.subscribe { (event) in         print(event)     }     //5秒后创建一个序列,每隔1秒产生一个元素     let observable15 = Observable<Int>.timer(5, period: 1, scheduler: MainScheduler.instance)     observable15.subscribe { (event) in         print(event)     } 

目前正在入门RxSwift,这是我的笔记>>>,按照课时整理,与大家共同进步。

转载本站任何文章请注明:转载至神刀安全网,谢谢神刀安全网 » RxSwift—Observable介绍、创建可观察序列

分享到:更多 ()