Observable.from订阅关闭被调用两次

时间:2019-10-18 14:43:09

标签: rx-swift

执行后,下面的代码将打印两次“订阅”。为什么? RxSwift 5.0

import UIKit
import RxSwift

class ViewController: UIViewController {

    let data = Data(repeating: 100, count: 1_000_000_000_0)

    override func viewDidLoad() {
        super.viewDidLoad()


        let disposeBag = DisposeBag()
        Observable<Data>
            .from(data)
            .subscribe( { _ in print("subscribe") } )
            .disposed(by: disposeBag)

    }

}

2 个答案:

答案 0 :(得分:0)

subscribe中的闭包被称为onNext和onCompleted事件,这就是为什么打印两次的原因

答案 1 :(得分:0)

这是正确的行为。您正在创建一个仅包含一个值的Observable,该值会导致两个事件触发:

  1. 下一个事件(包含您的数据对象)
  2. 完成事件,指示流已完成。

我怀疑您所关注的是第一个(下一个)事件。从以下位置更改代码:

Observable<Data>
        .from(data)
        .subscribe( { _ in print("subscribe") } )
        .disposed(by: disposeBag)

收件人:

Observable<Data>
        .from(data)
        .subscribe(onNext: { _ in print("subscribe") } )
        .disposed(by: disposeBag)

这将仅向您提供包含Data对象的Next事件。