【问题标题】:map RxMoya Single Response to RxSwift Observable Result将 RxMoya 单一响应映射到 RxSwift 可观察结果
【发布时间】:2020-10-10 01:16:55
【问题描述】:

我正在尝试将 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 扩展的帮助都会很棒。

谢谢

【问题讨论】:

    标签: swift rx-swift moya


    【解决方案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)) })
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-07-27
      • 1970-01-01
      • 2021-10-07
      • 2020-06-30
      • 2019-08-18
      • 2018-06-05
      • 1970-01-01
      相关资源
      最近更新 更多