使用Swift 4,我调用这样的RESTful API:
let session = URLSession.shared
session.dataTask(with: request) { (data, response, error) in
if error != nil {
completion(nil)
} else {
if data != nil, let user = try? MyRequests.jsonDecoder.decode(User.self, from: data!){
completion(user)
}
else{
completion(nil)
}
}
}.resume()
响应的statusCode为422,代码失败,但错误为零。为什么会这样?
答案 0 :(得分:2)
error
返回的URLSession.dataTask
值用于表示网络错误(例如没有互联网连接等)。但是,此变量中不会返回后端/ API错误。
如果您的后端返回更详细的错误消息作为响应正文,则需要解析data
变量以查看问题的确切原因。内置网络方法实际上并不评估HTTP状态代码,您需要手动执行此操作。
可能不希望在系统库中评估它们,因为不能保证所有API都遵循HTTP状态代码,因此自动评估它们可能会导致错误的成功/错误消息。此外,用于返回错误消息的HTTP请求/响应没有标准部分,因此自动解析这些也可能是有问题的。