RxSwift分离流

RxSwift分离流,swift,observable,rx-swift,Swift,Observable,Rx Swift,修改----------------------------------------- 有一条小溪 let o = Observable.just(1).concatMap(someProcedure).debug() let o1 = o.map { "\($0 * 2)" } let o2 = o.map { "\($0)" } let proc = [o1, o2] Observable.from(proc).concatMap {

修改-----------------------------------------

有一条小溪

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

func someProcedure(_ value: Int) -> Observable<Int> {
    print("someProcedure!!")
        
    var result = 100
        
    // do something
       
    return Observable.just(result)
}
let o=Observable.just(1).concatMap(someProcedure.debug())
设o1=o.map{“\($0*2)”}
设o2=o.map{“\($0)”}
设proc=[o1,o2]
可观察的.from(proc).concatMap{$0}
.subscribe(onNext:{uu}in
}).处置(由:处置人)
func someProcedure(值:Int)->可观察{
打印(“someProcedure!!”)
var结果=100
//做点什么
返回可观察的。仅(结果)
}
在这种情况下,“someProcedure!!”印刷两次

我只想在两个流(o1,o2)中使用func'someProcedure'的返回值

func'someProcedure'不需要执行两次


有可能吗?

使用
o上的
take(1)
操作符只向下游传递第一个发出的值使用
take(1)
操作符只向下游传递第一个发出的值
o

一个可观测值,默认情况下,它将为每个订阅创建一个新作业。这就是为什么要打印两个程序

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

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

作为可观察的,默认情况下,它将为每个订阅创建一个新作业。这就是为什么要打印两个程序

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

let o = Observable.just(1).concatMap(someProcedure).debug()
    .share(replay: 1)
let o1 = o.map { "\($0 * 2)" }
let o2 = o.map { "\($0)" }
let proc = [o1, o2]
您希望
o
发出什么?您希望
o
发出什么?