美文网首页swift开源库swift学习
RxSwift tips - 多次订阅同一个信号

RxSwift tips - 多次订阅同一个信号

作者: CepheusSun | 来源:发表于2017-11-24 15:09 被阅读117次
    image.png

    对同一个信号多次订阅会发生什么情况呢?我们来看看这段代码:

    var start = 0
    let getStartNumber: () -> Int = {
        start += 1
        return start
    }
            
    let numbers = Observable<Int>.create{
        let start = getStartNumber()
        $0.onNext(start)
        $0.onNext(start + 1)
        $0.onNext(start + 2)
        $0.onCompleted()
        return Disposables.create()  
    }
            
    numbers
        .subscribe(onNext: { (el) in
            print("element [\(el)]")
        }, onCompleted: {
            print("----------")
        }).disposed(by: disposebag)
    
    numbers
        .subscribe(onNext: { (el) in
            print("element [\(el)]")
        }, onCompleted: {
            print("----------")
        }).disposed(by: disposebag)
    /*
    element [1]
    element [2]
    element [3]
    ----------
    element [2]
    element [3]
    element [4]
    ----------
    */
    

    Rx 中的 Observables 是一个拉驱动的事件序列。

    推驱动:在创建的时候,序列中的值不会被立即赋值,之后才会被赋值。(网络请求)

    拉驱动:在创建信号的时候,序列中的值就会被确定下来,我们可以从流中一个一个的拿到值

    对一个 Observable 使用各种操作符都不会产生什么实际的效果。一旦调用了 subscribe(...) 也就是说一旦有东西订阅了这个信号之后,它才会开始发出事件序列。

    每次订阅这个信号, observable 都会执行 create 这个闭包。

    上面代码最后的结果也是因为这个原因:

    每一次调用subscribe(...) ,也就是订阅某个信号,都会给这次订阅创建新的信号。所以也很难保证每个都是一样的。

    相关文章

      网友评论

        本文标题:RxSwift tips - 多次订阅同一个信号

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