我正在尝试JSONDecoder
使用 Alamofire 解码来自我的服务器的 json 响应。当我用 a 解码响应时guard
,它可以正常工作。这种方法的副作用是,当解码实际失败时,我不知道问题出在哪里。
guard let result: TResponseData = try? decoder.decode(TResponseData.self, from: response.data!) else {
self.logger.error("Unable to decode the response data into a model representation.")
return
}
所以相反,我想使用 ado { } catch { }
但我无法弄清楚我应该如何在 AlamofireresponseJSON
回调中使用它。
这是我目前得到的:
Alamofire.request(completeUrl, method: .post, parameters: parameters, encoding: encoding, headers: headers)
.validate()
.responseJSON { (response) -> Void in
self.logger.info("POST Response: \(String(describing:response.response?.statusCode))")
switch response.result {
case .success(_):
let decoder = JSONDecoder()
decoder.dateDecodingStrategy = .custom(Date.toTMDBDate)
do {
let _ = try decoder.decode(TResponseData.self, from: response.data!)
} catch DecodingError.dataCorrupted(let error) {
self.logger.error(error.underlyingError)
return
}
completion(result)
return
case .failure(let error):
//....
}
然而,这段代码给我的是一个编译器错误.responseJSON { (response) -> Void in
。
从“(_) -> Void”类型的抛出函数到非抛出函数类型“(DataResponse) -> Void”的无效转换。
保护代码工作正常,如果我将其更改try
为 atry?
或强制展开,它会编译 - 我只是无法让我的 catch 处理实际错误。
如果我更改catch
块以使其不包含任何模式,则代码将编译。
catch {
return
}
这并没有给我任何我给我的东西guard
。我真的很想捕获操作遇到的错误decode
。我使用了错误的模式吗?为什么使用该DecodingError.dataCorrupted
模式似乎会改变回调签名?