我有这样的代码
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 是等价的
很明显,因为Just
has Never
asFailure
和.flatMap
requires Error
as 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 次 |
最近记录: |