NetworkBoundResource在RxSwift

问题描述 投票:-1回答:1

我是一名Android开发者,但很新的Swift/Rxswift,我试图代码NetworkBoundResource等效的,但我不知道这是可能的话,使用Rxswift,因为它缺乏相当于MediatorLiveData和合并运营商不会让你做分配对于每个可测量的封闭件。

任何线索?

android ios swift reactjs rx-swift
1个回答
0
投票

这里是一个非常有用的功能工厂。您可以通过将在说明,如何从数据库和网络,以及如何对数据数据保存到数据库调用它。它产生的操作,你可以在一个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])
        }
    }
}

只是一个想法。

© www.soinside.com 2019 - 2024. All rights reserved.