我是RXSwift的新手,我尝试使用CombineLatest合并两个公共主题的最新结果
我试图做的是:
let sub1 = PublicSubject<Type1>()
let sub2 = PublicSubject<Type2>()
NetworkService1.fetch { sub1Value in
sub1.onNext(sub1Value)
}
NetworkService2.fetch { sub21Value in
sub2.onNext(sub2Value)
}
Observable.combineLatest(sub1.asObservable(), sub2.asObservable()) {
val1, val2 in
// do something with val1 and val2
// It seems it never hits this block
}
不知道我在做正确的事。
最佳答案
首先,请注意以下几点:
没有PublicSubject
,它是PublishSubject
(可能只是拼写错误;)
您无需调用asObservable()
即可将PublishSubjects用作combineLatest
的参数
您必须订阅您的Observable(在本例中为Observable.combineLatest
),否则将不会发生任何事情。
即使您正确订阅了Observable.combineLatest
,您也不会获得在订阅之前发出的值,因此必须在订阅之后触发这些获取调用。
由于一段代码值得一千个单词:
let disposeBag = DisposeBag()
let sub1 = PublishSubject<String>()
let sub2 = PublishSubject<String>()
Observable.combineLatest(sub1, sub2) {
val1, val2 in
// do something with val1 and val2
// IT SHOULD WORK NOW
}.subscribe().disposed(by: disposeBag)
NetworkService1.fetch { sub1Value in
sub1.onNext(sub1Value)
}
NetworkService2.fetch { sub2Value in
sub2.onNext(sub2Value)
}
关于ios - 如何在RXSwift中将CombineLatest用于两个公共(public)主题,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/52583369/