RxSwift学习 - share(replay:scope:)

share(replay:scope:)

shareReplay 会返回一个新的事件序列,它监听底层序列的事件,并且通知自己的订阅者们。
解决有多个订阅者的情况下,map会被执行多次的问题。

        let seq = PublishSubject()
        let a = seq.map { (i) -> Int in
            print("MAP---\(i)")
            return i * 2
        }
//        .share(replay: 1, scope: .forever)
        
        let _ = a.subscribe(onNext: { (num) in
            print("--1--\(num)")
        }, onError: nil, onCompleted: nil, onDisposed: nil)
        
        seq.onNext(1)
        seq.onNext(2)
        
        let _ = a.subscribe(onNext: { (num) in
            print("--2--\(num)")
        }, onError: nil, onCompleted: nil, onDisposed: nil)
        
        seq.onNext(3)
        seq.onNext(4)
        
        let _ = a.subscribe(onNext: { (num) in
            print("--3--\(num)")
        }, onError: nil, onCompleted: nil, onDisposed: nil)
        
        seq.onCompleted()

有share,执行结果:

MAP---1
--1--2
MAP---2
--1--4
--2--4
MAP---3
--1--6
--2--6
MAP---4
--1--8
--2--8
--3--8

无share,执行结果:

MAP---1
--1--2
MAP---2
--1--4
MAP---3
--1--6
MAP---3
--2--6
MAP---4
--1--8
MAP---4
--2--8

你可能感兴趣的:(RxSwift学习 - share(replay:scope:))