我有一个searchBar来查询API的结果。如果我直接从VC查询而不将文本传递给演示者,我会得到完全正常的:
searchBar.rx.text
.skip(1)
.throttle(0.5, scheduler: MainScheduler.instance)
.distinctUntilChanged()
.flatMapLatest({ (text) -> Observable<[MarvelCharacter]> in
return GetCharacters().execute(offset: 0, name: text)
}).subscribe(onNext: { (characters) in
self.showCharacters(characters: characters)
}).addDisposableTo(disposeBag)
我真正想要的是在演示者中订阅GetCharacters()。 可能是这样的:
的ViewController
searchBar.rx.text
.skip(1)
.throttle(0.5, scheduler: MainScheduler.instance)
.distinctUntilChanged()
.map(presenter.searchTextDidChanged)
.subscribe().addDisposableTo(disposeBag)
演示
func searchTextDidChanged(text: String) {
getCharacters.execute(offset: offset, name: text)
.subscribe(onNext: { characters in
(self.offset == 0) ?
self.ui.showCharacters(characters: characters) : self.ui.appendCharacters(characters: characters)
}).addDisposableTo(disposeBag)
}
但有时我发送RxSw(显示结果RxSwift)和RxSwZ(空结果),但由于我丢失了“链”,演示者的getCharacters会被执行两次。然后,如果第二个请求在良好请求之前终止,我在带有RxSw5的searchBar中结束,并且在结果中使用RxSwift,我该如何处理?