美文网首页iOS-swiftRXswiftRxSwift干货
RxSwift文档翻译6 -- Mathematical and

RxSwift文档翻译6 -- Mathematical and

作者: 小白猿 | 来源:发表于2017-06-01 18:51 被阅读80次

    前言

    本章中主要介绍数学和一些综合运算符,操作是作用于整个观察序列的元素

    Mathematical and Aggregate Operators

    • toArray
      将观察序列多个元素转换为单个元素的序列,这个元素就是源序列元素的数组集合
    example("toArray") {
          let disposeBag = DisposeBag()
          Observable.range(start: 1, count: 10)
                    .toArray()
                    .subscribe { print($0) }
                    .disposed(by: disposeBag)
            }
    
    // 控制台打印的结果:
    --- toArray example ---
    next([1, 2, 3, 4, 5, 6, 7, 8, 9, 10])
    completed
    
    • reduce
      类似于scan,有一个种子值和一个操作符,对种子值作为第一个值与第一个元素进行计算,结果作为新的种子值与第二个元素进行计算。与scan不用的是,reduce的是取最后一个计算结果作为新的序列的元素
    example("reduce") {
        let disposeBag = DisposeBag()
        
        Observable.of(10, 100, 1000)
            .reduce(1, accumulator: +)
            .subscribe(onNext: { print($0) })
            .disposed(by: disposeBag)
    }
    
    // 控制台打印的结果:
    --- reduce example ---
    1111
    
    • concat
      用于多个序列的事件元素的链接,按照顺序的方式进行连接,当一个序列的元素连接完毕并结束后在链接下一个序列

    本文作者注:我所理解的结束,应该是序列发出Complete事件或者Error事件,并且在官方实例中子序列用的是BehaviorSubject,仅发出最近的元素,所以在比如A序列在前,B序列在后,B发出b1, b2两个元素,然后A Complete,由于b2是最近的元素,所以在链接的时候b1就会被忽略了*

    example("concat") {
        let disposeBag = DisposeBag()
        
        let subject1 = BehaviorSubject(value: "🍎")
        let subject2 = BehaviorSubject(value: "🐶")
        
        let variable = Variable(subject1)
        
        variable.asObservable()
            .concat()
            .subscribe { print($0) }
            .disposed(by: disposeBag)
        
        subject1.onNext("🍐")
        subject1.onNext("🍊")
        
        variable.value = subject2
        
        subject2.onNext("I would be ignored")
        subject2.onNext("🐱")
        
        subject1.onCompleted()
        
        subject2.onNext("🐭")
    }
    
    // 控制台打印的结果:
    --- concat example ---
    next(🍎)
    next(🍐)
    next(🍊)
    next(🐱)
    next(🐭)
    
    

    下一篇:RxSwift文档翻译7 - Connectable Operators

    相关文章

      网友评论

      • Jt_Self:第一个toarray的example代码写错咯!作者辛苦
        小白猿:刚查了一下源码,确实写错了,改过来了,多谢指正

      本文标题:RxSwift文档翻译6 -- Mathematical and

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