我是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/

10-12 14:35