使用MVP的RxSwift从Presenter订阅

时间:2016-10-15 05:38:12

标签: ios swift rx-swift

我有一个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,我该如何处理?

0 个答案:

没有答案