我是一名Android开发者,但很新的Swift/Rxswift
,我试图代码NetworkBoundResource等效的,但我不知道这是可能的话,使用Rxswift
,因为它缺乏相当于MediatorLiveData和合并运营商不会让你做分配对于每个可测量的封闭件。
任何线索?
这里是一个非常有用的功能工厂。您可以通过将在说明,如何从数据库和网络,以及如何对数据数据保存到数据库调用它。它产生的操作,你可以在一个flatMap使用得到的请求的结果。
这将第一发射从DB中的值,然后使网络请求。如果网络请求成功,运营商将发出的结果,也将其发送到数据库来存储。
我会这样调用:let getResource = resource(loadFromDb: /* loader */, network: /* requester */, save: /* saver */)
然后,你可以在一个可观察的RequestType的在flatMap使用getRequest
。
func resource<RequestType, ResultType>(loadFromDb: @escaping (RequestType) -> Observable<ResultType>,
network: @escaping (RequestType) -> Observable<ResultType>,
save: AnyObserver<(RequestType, ResultType)>
) -> (RequestType) -> Observable<ResultType> {
return { request in
return Observable.create { observer in
let netResult = network(request)
.share(replay: 1)
let dispose1 = Observable.concat(loadFromDb(request), netResult)
.bind(to: observer)
let dispose2 = netResult
.map { (request, $0) }
.bind(to: save)
return Disposables.create([dispose1, dispose2])
}
}
}
只是一个想法。