美文网首页ios
转换操作

转换操作

作者: 你家旭哥 | 来源:发表于2017-08-09 09:33 被阅读16次

    转换可观察队列发出的Next事件里元素的操作

    map

    将转换闭包应用于可观察序列发出的元素,并返回已转换元素的一个新的可观察序列。

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

    flatMap and flatMapLatest

    还记得之前的switchLatestflatMapLatest就是mapswitchLatest的组合,flatMap就是把Latest去掉。
    官方解释是这样的:将Observable队列发出的元素转换成一个新的可观察队列,并将两者的输出组合成一个新的可观察队列,意思就是说会监听原队列,也会监听你闭包中转换过的队列。flatMapLatest不同的就是会监听最近的队列。(队列被改掉了)

    let disposeBag = DisposeBag()
    
    struct Player {
        var score: Variable<Int>
    }
    
    let 👦🏻 = Player(score: Variable(80))
    let 👧🏼 = Player(score: Variable(90))
    
    let player = Variable(👦🏻)
    
    player.asObservable()
        .flatMap { $0.score.asObservable() } // Change flatMap to flatMapLatest and observe change in printed output
        .subscribe(onNext: { print($0) })
        .disposed(by: disposeBag)
    
    👦🏻.score.value = 85  // 会有响应
    
    player.value = 👧🏼    // 这边也会有响应  监听了两个组合队列
    
    👦🏻.score.value = 95 // Will be printed when using flatMap, but will not be printed when using flatMapLatest
    
    👧🏼.score.value = 100
    

    scan

    以初始值开始,然后将一个累加器闭包应用于可观察序列所发射的每个元素,并将每个中间结果作为一个元素可观察序列返回。看例子

    let disposeBag = DisposeBag()
    
    Observable.of(10, 100, 1000)
        .scan(1) { aggregateValue, newValue in    // aggregateValue 之前返回的值
            aggregateValue + newValue
        }
        .subscribe(onNext: { print($0) })
        .disposed(by: disposeBag)    //  11,111,1111
    

    过滤和条件操作

    相关文章

      网友评论

        本文标题:转换操作

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