【发布时间】:2023-10-15 07:46:02
【问题描述】:
我的 API 通常以 JSON 格式返回某种格式(简化符号):
{
status: // http status
error?: // error handle
data?: // the response data
...
}
在我的组合运算符中,我从 URLSession dataTaskPublisher 中获取 data 并将响应解析为反映上述模式的 Decodable 对象。效果很好。
但是,我有一个端点,它返回 HTTP 状态代码 201(操作成功),并且根本没有没有数据。我如何将其与我的操作员链接而不抛出错误?
这就是我所拥有的:
publisher
.map { (data, response) in
guard data.count > 0 else {
let status = (response as! HTTPURLResponse).statusCode
return Data("{\"status\": \(status), \"data\": \"\"}".utf8)
}
return data
}
.mapError { CustomError.network(description: "\($0)")}
.decode(type: MyResponse<R>.self, decoder: self.agent.decoder)
.mapError { err -> CustomError in CustomError.decoding(description: "\(err)") }
...
如您所见,我只是构造了一个适当的响应,其中响应的“数据”是一个空字符串。然而,这很丑陋而且有点老套,当我已经拥有了我需要的一切时,我不明白为什么管道应该继续解析等原因。如何中断它并为其最终订阅者成功完成管道?
【问题讨论】:
标签: swift operator-keyword combine publisher