map Однократный ответ RxMoya на наблюдаемый результат RxSwift - PullRequest
0 голосов
/ 19 июня 2020

Я пытаюсь сопоставить 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 Ответ

1 голос
/ 20 июня 2020

Что-то вроде этого:

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

Хотя было бы разумнее сопоставить его с драйвером, а не с наблюдаемым ... В противном случае у вас есть две возможные ошибки ...

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