首页 > 解决方案 > 将 Just 与 flatMap 一起使用会产生失败不匹配。结合

问题描述

我有这样的代码

func request(request: URLRequest) -> AnyPublisher<Data, Error> {
    return Just(request)
        .flatMap { request in
            RequestManager.request(request) // returns AnyPublisher<Data, Error>
    }
    .eraseToAnyPublisher()
}

我收到编译错误:

实例方法 flatMap(maxPublishers:_:) 要求 Just.Failure(又名 Never)和 Error 类型是等价的

很清楚,因为Justhas NeverasFailure.flatMaprequires Erroras Failure,所以Never!=Error

我看到两种方法:

任何想法如何处理它?

更新:

使用起来更有意义

.setFailureType(to: Error.self)

或者

.mapError { $0 as Error }

标签: swiftcombine

解决方案


有专门的运算符setFailureType(to:)。您可以将故障类型覆盖为您需要的任何错误类型。

func request(request: URLRequest) -> AnyPublisher<Data, Error> {
    return Just(request)
        .setFailureType(to: Error.self)
        .flatMap { request in
            RequestManager.request(request) // returns AnyPublisher<Data, Error>
    }
    .eraseToAnyPublisher()
}

https://developer.apple.com/documentation/combine/just/3343941-setfailuretype


推荐阅读