0
を追跡します。RxSwiftは、私は、コードを次している複数の観測活動
私はisActive
のようなものが必要です.bool値は、api/databaseタスクのいずれかが進行中の場合はtrue
を返します。出来ますか? RxSwiftの例ではActivityIndicatorを見ましたが、私の場合はそれを使用することは可能ですか? API /データベースから
コード必要に応じて:
// API
func subscribeArrayRequest<T>(_ request: MappableRequest<T>,
from triggerObservable: Observable<Void>,
disposedBy disposeBag: DisposeBag) -> Observable<Event<[T]>> {
let result = ReplaySubject<Event<[T]>>.create(bufferSize: 1)
triggerObservable
.flatMapLatest {
SessionManager
.jsonArrayObservable(with: request.urlRequest, isSecured: request.isSecured)
.mapResponse(on: APIService.mappingSheduler) { Mapper<T>().mapArray(JSONArray: $0) }
.materialize()
}
.subscribe(onNext: { [weak result] event in
result?.onNext(event)
})
.disposed(by: disposeBag)
return result
}
// Database
func subscribeUpdates<N, P>(from data: UpdateData<N, P>, disposedBy disposeBag: DisposeBag) -> Observable<Void> {
let result = PublishSubject<Void>()
data.newObjectsObservable
.observeOn(DatabaseService.writingSheduler)
.subscribe(onNext: { [weak result] newObjects in
// update db
DispatchQueue.main.async {
result?.onNext(())
}
})
.disposed(by: disposeBag)
return result
}
感謝。サービスメソッドにActivityIndicatorインスタンスを渡すと、このようにそれを使用します:
func bindArrayRequest<T>(_ request: MappableRequest<T>,
from triggerObservable: Observable<Void>,
trackedBy indicator: RxActivityIndicator,
disposedBy disposeBag: DisposeBag) -> Observable<Event<[T]>> {
let result = ReplaySubject<Event<[T]>>.create(bufferSize: 1)
triggerObservable
.flatMapLatest {
SessionManager
.jsonArrayObservable(with: request.urlRequest, isSecured: request.isSecured)
.mapResponse(on: APIService.mappingSheduler) { Mapper<T>().mapArray(JSONArray: $0) }
.materialize()
.trackActivity(indicator)
}
.bind(to: result)
.disposed(by: disposeBag)
return result
}
も観測可能にするデータベースの更新ロジックをラップし、APIのようflatMapLatest
に.trackActivity(indicator)
でそれを使用するソリューション以下見つかり