RxSwift -- 内置事件发生器

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-|-->

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,067评论 19 139
  • 发现 关注 消息 RxSwift入坑解读-你所需要知道的各种概念 沸沸腾关注 2016.11.27 19:11*字...
    枫叶1234阅读 2,854评论 0 2
  • //PublishSubject -> 会发送订阅者从订阅之后的事件序列 PublishSubjectlet se...
    zidon阅读 1,608评论 0 3
  • 这段时间每天早起打卡发圈,看到最多的评论是“好努力的宝妈!”“真棒,向你学习”等等,听得“满心欢喜,每天学习的动力...
    壹壹说成长阅读 167评论 0 3
  • 寂寞_狂欢阅读 188评论 0 0