ios - 使用没有返回的 Swift 组合的 POST 请求不适用于 AnyPublisher
问题描述
我有一个 POST 请求向用户发送一条短信,该短信不返回任何内容,只返回状态码。我尝试返回 AnyPublisher<Void, CustomError> 但它不起作用。 在此处输入图像描述
这是我的通用请求方法的样子:
func request<T>(_ req: NetworkRequest) -> AnyPublisher<T, NetworkError> where T: Decodable, T: Encodable {
let sessionConfig = URLSessionConfiguration.default
sessionConfig.timeoutIntervalForRequest = TimeInterval(req.requestTimeout ?? requestTimeout)
guard let url = URL(string: req.url) else {
// Return a fail publisher if the url is invalid
return AnyPublisher(
Fail<T, NetworkError>(error: NetworkError.badURL("Invalid Url"))
)
}
// We use the dataTaskPublisher from the URLSession which gives us a publisher to play around with.
return URLSession.shared
.dataTaskPublisher(for: req.buildURLRequest(with: url))
.tryMap { output in
// throw an error if response is nil
guard output.response is HTTPURLResponse else {
throw NetworkError.serverError(code: 0, error: "Server error")
}
return output.data
}
.decode(type: T.self, decoder: JSONDecoder())
.mapError { error in
// return error if json decoding fails
NetworkError.invalidJSON(String(describing: error))
}
.eraseToAnyPublisher()
}
解决方案
看起来主要问题是你试图AnyPublisher<T,NetworkError>
变成AnyPublisher<Void,NetworkError>
.
你可以这样做:
service.request(request).map { _ in () }.eraseToAnyPublisher()
推荐阅读
- vector - 如何在不分配内存的情况下从 vec 中变异和删除元素?
- mapbox - Mapbox 挤压在 Android 中显示,但在 iOS 中不显示
- c# - 复制并重命名通配符图像文件c#
- azure-data-factory-2 - 从复制数据活动中的输出数组中提取元素
- c# - 抽象类与空实现方法的继承类案例的设计模式
- python - 在同一目录的几个连续文本文件中删除列,python
- javascript - 如何在 JavaScript SignalR 客户端中取消注册 onclose 事件处理程序
- c++ - QQuickImageProvider::requestImage 图片缩放,如何处理
- ssl - 如何使用 Pharo 获取 Twitter 提要?
- mongodb - 从对象的mongodb数组中删除一个对象