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]
已修改----------------------------------------
有流。
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]