美文网首页
RxSwift 转换操作符

RxSwift 转换操作符

作者: AKyS佐毅 | 来源:发表于2017-07-25 15:01 被阅读0次

    RxSwift中最重要的一类操作符,叫做Transform operators它们用来把一个Observable中的事件,变成另外一种形式。可以说,任何一个基于RxSwift开发的项目,都会使用这一类操作符。作为这个话题的第一部分,我们来看一些直观易懂的Transform operators。
    七种转换操作符

    delay

    delayWithSelector

    delayWithSelector.png

    map

    通过使用一个闭包函数将原来的Observable序列转换为一个新的Observable序列

    let disposeBag = DisposeBag()
    Observable.of(1,2,3)
        .map({
        return $0 * $0
    }).subscribe({print($0)})
      .disposed(by: disposeBag)
    

    执行结果

    next(1)
    next(4)
    next(9)
    completed
    

    flatmap

    现实中很多事件都是异步发生的,而并不是像Observable.of创建的看起来像集合这样的。因此,当我们需要对异步发生的事件序列进行变换的时候,就需要订阅原来的事件序列,对异步发生的事件有所察觉。其中,网络编程就是一个最典型的例子。为了在请求一个网络资源后,根据服务器返回的结果对原事件序列进行变换,flatMap就是最好的选择


    let disposeBag = DisposeBag()
    
    struct Student {
    var score:Variable<Int>
    }
    
    let student1 = Student(score: Variable(60))
    let student2 = Student(score: Variable(70))
    
    let observables = Variable(student1)
    observables.asObservable()
    .flatMap({
        $0.score.asObservable()
    })
    .subscribe(onNext: {
        print($0)
    })
    .disposed(by: disposeBag)
    
    student1.score.value = 75
    observables.value = student2
    student1.score.value = 85
    student2.score.value = 20
    

    执行结果

    60
    75
    70
    85
    20
    

    scan

    scan就是提供一个初始化值,然后使用计算闭包不断将前一个元素和后一个元素进行处理,并将处理结果作为单个元素的Observable序列返回


    let disposeBag = DisposeBag()
        
    Observable.of(10, 100, 1000)
        .scan(2) { aggregateValue, newValue in
            aggregateValue + newValue
        }
        .subscribe(onNext: { print($0) })
        .disposed(by: disposeBag)
    

    执行结果:

    12
    112
    1112
    

    toArray

    let bag = DisposeBag()
    
    Observable.of(1, 2, 3)
        .toArray()
        .subscribe(onNext: {
            // Array<Int>
            print(type(of: $0))
            // [1, 2, 3]
            print($0)
        }).addDisposableTo(bag)
    

    相关文章

      网友评论

          本文标题:RxSwift 转换操作符

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