RxSwift -- 内置事件发生器

2017-09-20  本文已影响6人  yww

RxSwift 内置了很多事件发生器, 所以你并不需要每次都是用 create 创建.

never/ empty/ just/ error

这个很特别, 是用这个工厂方法创建的可观察对象什么都不会发送, 也不会结束

Observable<String>.never().subscribe { (_) in
    print("nerver print")
}.disposed(by: disposeBag)

比如这上面的这个 print 永远不会输出
你也可以自己用写一个 never

Observable<String>.create({ (observer) -> Disposable in
    return Disposables.create()
}).subscribe { (_) in
    print("nerver print")
}.disposed(by: disposeBag)

就像这样, 既没有任何事件, 也没有结束
------->
empty和 never 唯一的不同就是会有一个结束事件, 也不会有任何的 next 事件发出
----|--->
just 会有一个 next 事件发出, 然后就结束.
----1-|-->
error 和 empty 类似, 不过不是结束事件, 而是错误事件, 这个通常用于处理中抛出一个错误
----×--->

of/ from/ range/ repeat/generate

of 则依顺序发送多个事件, 然后再结束
from 和 of 类似, 不过 from 只有一个参数, 参数类型为序列, 内部会自动将序列拆开发送
range 则会生成一个根据起始值和重复次数, 生成一个递增序列
generate 使用一个初始值, 一个判断语句, 以及一个获取下一个值 的方式生成一个序列, 类似于C++的 for( int i = 0; i < 5; i++)

Observable.of(1, 2, 3, 4, 5).subscribe { (event) in
    print(event)
}.disposed(by: disposeBag)
Observable.generate(initialState: 1, condition: {$0 <= 5}, iterate: {$0 + 1})
          .subscribe { (event) in
              self.print(event)
           }.disposed(by: disposeBag)

---1-2-3-4-5-|-->

repeatElement

repeatElement会生成一个无尽的队列, 每次重复发送指定的数据, 一般使用 take 语句取前几个数据, 如

Observable.repeatElement(1).take(3).subscribe { (event) in
   self.print(event)
}.disposed(by: disposeBag)

---1-1-1-|-->

上一篇下一篇

猜你喜欢

热点阅读