RxSwift 分离流

RxSwift separate stream

已修改----------------------------------------

有流。

let o = Observable.just(1).concatMap(someProcedure).debug()
let o1 = o.map { "\([=10=] * 2)" }
let o2 = o.map { "\([=10=])" }
let proc = [o1, o2]
        
Observable.from(proc).concatMap { [=10=] }
    .subscribe(onNext: { _ in
            
    }).disposed(by: disposeBag)

func someProcedure(_ value: Int) -> Observable<Int> {
    print("someProcedure!!")
        
    var result = 100
        
    // do something
       
    return Observable.just(result)
}

在这种情况下,'someProcedure!!' 被打印了两次。

我只想在两个流(o1, o2)

中使用 return func 'someProcedure' 的值

func 'someProcedure'不需要执行两次.

可能吗?

o 上使用 take(1) 运算符仅向下游传递第一个发出的值

一个Observable,它会默认为每个订阅创建一个new job。这就是您打印两个程序的原因。

要解决此问题,您需要共享订阅...

let o = Observable.just(1).concatMap(someProcedure).debug()
    .share(replay: 1)
let o1 = o.map { "\([=10=] * 2)" }
let o2 = o.map { "\([=10=])" }
let proc = [o1, o2]