美文网首页
RxSwift -- 内置事件发生器

RxSwift -- 内置事件发生器

作者: yww | 来源:发表于2017-09-20 10:41 被阅读6次

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

    相关文章

      网友评论

          本文标题:RxSwift -- 内置事件发生器

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