有一个 API,它将其响应包装在一个带有status值和data值的关联数组中,其中data包含错误对象或预期值:
不良反应:
{
"status":"error",
"data":{
"errormessage":"Duplicate entry '101' for key 'PRIMARY'",
"errorcode":1062
}
}
成功响应:
{
"status":"success",
"data":{
"user": {
"id": 1,
}
}
}
我想验证这些响应:
public class func validateResponse(_ data : Data) -> WebServicesError?
{
struct WTPResponse : Decodable
{
let status : String
let data : Data
}
do {
let response = try JSONDecoder().decode(WTPResponse.self, from: data) // FAILS HERE
if let wtpError = try? JSONDecoder().decode(WTPAPIError.self, from: response.data) {
return WebServicesError.wtpError(WTPAPIError(code: wtpError.code, message: wtpError.message))
}
}
catch let error {
return WebServicesError.init(error: error)
}
return nil
}
尝试解码带有错误的响应对象时总是失败:Expected to decode Data but found a dictionary instead.我在想我可以将data对象解码为 Swift 类型Data,但它实际上是一个[String: Any]字典。
1) 如何验证Data我从 API 收到的信息?
2)有没有一种方法可以只提取dataJSON响应的“”部分作为Data类型,这样我就可以解码User对象而不必给它一个status和data属性?
