【发布时间】:2020-05-28 18:25:13
【问题描述】:
我所有的 API 端点都返回一个在 Postman 中看起来像这样的响应:
{
"statusCode": 401,
"error": "Unauthorized",
"message": "Missing authentication"
}
我想做的是发出请求,并在 Swift 中访问这些属性。在某些情况下,我会在应用程序的前面使用错误消息属性的值。这将由返回的 statusCode 确定。
我现在拥有的是这样的:
private var cancellable: AnyCancellable?
let url = URL(string: "http://abc336699.com/create")
self.cancellable = URLSession.shared.dataTaskPublisher(for: url!)
.map { $0.data }
在此之前,我尝试过 tryMap,但它返回的错误类型并没有给我想要的灵活性。然后我继续尝试 Almofire,但对于我想做的事情来说,这似乎是一种过度杀戮。
我想检查我收到的响应中返回的内容,但我收到以下错误:
Cannot assign value of type 'Publishers.Map<URLSession.DataTaskPublisher, Data>' to type 'AnyCancellable'
我想要简单地访问我的响应错误,以便我可以使用 combine 将 API 集成到整个应用程序中。
【问题讨论】:
-
AnyCancellable是一种通常由订阅者向发布者实现的协议,例如在.sink或.assign中使用的协议。.map是另一个发布者(不是订阅者)。如果需要处理错误,可以使用.catch -
您为什么不根据您的 JSON 响应创建可解码模型并使用 Combine 中的解码运算符对其进行解码?
-
@user832 如果在 200 statusCode 响应后有数据要解码,那很好,但我也需要捕获错误。
-
@LondonGuy,这应该可以帮助你:developer.apple.com/documentation/foundation/urlsession/…
-
@LondonGuy 请记住,非 200 状态计数是网络成功。如果请求从未得到服务器的响应,数据任务发布者只会出错。如果服务器返回非 200 状态代码,您可以将其提取到
map