美文网首页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 - 多次订阅同一个信号

    对同一个信号多次订阅会发生什么情况呢?我们来看看这段代码: Rx 中的 Observables 是一个拉驱动的事件...

  • RAC :RACMulticastConnection 多次订阅

    //RACMulticastConnection 多次订阅同一个信号 RACSignal *signal = ...

  • RxSwift(二)原理-执行流程

    RxSwift使用步骤: 创建序列 订阅信号 发送信号 示例代码 执行结果 关注点: 创建序列做了什么 订阅信号做...

  • RxSwift(五)-- RxSwift特征序列Driver

    概述 在RxSwift的任何序列中,都可以用Observable描述,创建 -> 订阅 -> 信号发送 -> 信号...

  • [iOS][RAC]--RACMulticastConnecti

    场景: 当同一个信号被多次订阅多次的时候,需要只发送一次请求多个地方在用,而不是没订阅一次发送一次请求,造成发送了...

  • RxSwift中的take

    对于我们使用RxSwift创建的信号,如果想有条件地执行订阅onnext,那么我们可以对创建的信号(Observa...

  • RXSwift(二)-工作流程

    RxSwift核心流程 创建序列 订阅序列 发送信号 销毁序列 序列创建 create 这里按着command点进...

  • RACMulticastConnection

    RACMulticastConnection:用于当一个信号,被多次订阅时,为了保证创建信号时,避免多次调用创建信...

  • ReactiveCocoa学习(三)

    RACMulticastConnection:用于当一个信号,被多次订阅时,为了保证创建信号时,避免多次调用创建信...

  • 解析RxSwift核心流程

    RxSwift的核心流程可以简化为三个步骤: 创建序列 订阅序列 发送信号 在执行这行代码得到的结果是: 订阅到:...

网友评论

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

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