map RxMoya对RxSwift可观察结果的单个响应

时间:2020-06-19 18:03:48

标签: swift rx-swift moya

我正在尝试将Single<Response>映射到Observable<Result<CustomObject, MoyaError>>,但是我不确定该怎么做。

我当前的功能如下:

    func accountInfo() -> Observable<AccountInfo> {
        return provider
                .rx
                .request(.accountInfo)
                .map(AccountInfo.self)
                .asObservable()
    }

但是,我想要以下内容:

    func accountInfo() -> Observable<Result<AccountInfo, MoyaError>> {
        return provider
                .rx
                .request(.accountInfo)
                .mapResult(AccountInfo.self)
                .asObservable()
    }

任何创建mapResult扩展名的帮助都很好。

谢谢

1 个答案:

答案 0 :(得分:1)

类似这样的东西:

extension Single {
    var asObservableResult: Observable<Result<Element, Error>> {
        return asObservable()
            .map { .success($0) }
            .catchError { .just(.failure($0)) }
    }
}

虽然将其映射到Driver而不是Observable可能更有意义...否则,您可能会遇到两个错误...

extension Single {
    var asDriverResult: Driver<Result<Element, Error>> {
        return asObservable()
            .map { .success($0) }
            .asDriver(onErrorRecover: { .just(.failure($0)) })
    }
}