swift - 将 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 类型是等价的
很清楚,因为Just
has Never
asFailure
和.flatMap
requires Error
as Failure
,所以Never
!=Error
我看到两种方法:
使用正确的Publisher,而不是
Just
,但我没有找到合适的人选。使用像
.mapError
,之类的运算符.mapError { $0 as Error }
,但我不确定这是个好主意。
任何想法如何处理它?
更新:
使用起来更有意义
.setFailureType(to: Error.self)
或者
.mapError { $0 as Error }
解决方案
有专门的运算符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
推荐阅读
- java - 如何知道 postgres 表列的大小
- git - GIT - 从 fork 推送到上游 master
- sql - 组合日期和按日期排序
- swift - 使用从函数返回的某些类的泛型类会导致错误
- android - Android Gradle如何根据当前的buildType设置变量
- nginx - .well-known/acme-challenge nginx 404 错误
- sql - Postgres - 如何加密列和他的数据
- python - 将设置的日期时间转换为纪元时间
- java - 我的构造函数定义不明确?
- angular - Karma Jasmine Html 报告未显示在 ng 测试中