我不能設法讓這個解決方案的工作: https://github.com/liuznsn/RxMoyaPaginationNetworkingRxSwift分頁
也許有人可以告訴我哪裏是錯誤的。加載變量永遠不會變爲false。我猜這個問題在請求中是可觀察的,但我找不到原因。
class PaginationNetworkModel<T1: Mappable>: NSObject {
let refreshTrigger = PublishSubject<Void>()
let loadNextPageTrigger = PublishSubject<Void>()
let loading = Variable<Bool>(false)
let elements = Variable<[T1]>([])
var offset:Int = 0
let error = PublishSubject<Swift.Error>()
private let disposeBag = DisposeBag()
override init() {
super.init()
let refreshRequest = loading.asObservable()
.sample(refreshTrigger)
.flatMap { [unowned self] loading -> Observable<[T1]> in
if loading {
return Observable.empty()
} else {
return self.loadData(offset: self.offset)
}
}
let nextPageRequest = loading.asObservable()
.sample(loadNextPageTrigger)
.flatMap { [unowned self] loading -> Observable<[T1]> in
if loading {
return Observable.empty()
} else {
self.offset += 1
return self.loadData(offset: self.offset)
}
}
let request = Observable
.of(refreshRequest, nextPageRequest)
.merge()
.shareReplay(1)
let response = request.flatMap { events -> Observable<[T1]> in
request
.do(onError: { error in
self.error.onNext(error)
}).catchError({ error -> Observable<[T1]> in
Observable.empty()
})
}.shareReplay(1)
Observable
.combineLatest(request, response, elements.asObservable()) { [unowned self] request, response, elements in
return self.offset == 0 ? response : elements + response
}
.sample(response)
.bind(to: elements)
.addDisposableTo(rx_disposeBag)
Observable
.of(request.map { _ in true },
response.map { $0.count == 0 },
error.map { _ in false }
)
.merge()
.bind(to: loading)
.addDisposableTo(rx_disposeBag)
}
func loadData(offset: Int) -> Observable<[T1]> {
return Observable.empty()
}
你意識到你'loadData'功能不會返回任何數據,意味着'響應'永遠不會開火? –
是的。正如你可以看到它的泛型類,如果我需要其他服務器方法,我繼承這個類。我確信響應火災,即如果我將request.map設置爲false,我將從服務器獲取所有對象,但沒有「加載」功能。 – pluck
由於某種原因,在response.map後調用了request.map,其中sets設置爲false,並立即設置爲請求的真實請求,但我無法看到它在響應後被調用的位置 – pluck