将 Just 与 flatMap 一起使用会产生失败不匹配。结合

Tik*_*der 28 swift combine

我有这样的代码

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

我收到编译错误:

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

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

我看到两种方法:

  • 使用正确的Publisher 而不是Just,但我没有找到合适的人选。

  • 使用诸如.mapError, 之类的运算符.mapError { $0 as Error },但我不确定这是个好主意。

任何想法如何处理它?

更新:

使用更有意义

.setFailureType(to: Error.self)
Run Code Online (Sandbox Code Playgroud)

或者

.mapError { $0 as Error }
Run Code Online (Sandbox Code Playgroud)

小智 50

有特殊运算符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()
}
Run Code Online (Sandbox Code Playgroud)

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