我有这样的代码
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
| 归档时间: |
|
| 查看次数: |
7163 次 |
| 最近记录: |