【发布时间】:2022-07-27 00:45:51
【问题描述】:
我正在调用一个 API,然后使用下面的简化代码对其进行解码
guard let url = URL(string: "someURL") else {
return
}
let task = URLSession.shared.dataTask(with: url) { data, response, error in
let decoder = JSONDecoder()
if let data = data {
do {
let results = try decoder.decode(Response.self, from: data)
print(results)
} catch {
print(error)
}
}
}
task.resume()
Response 是我下面看到的结构
struct Response : Codable {
let response: ResponseContents
}
struct ResponseContents : Codable {
let result : [wantedData]
}
struct wantedData : Codable {
let name: String
}
在大多数情况下,这很好用,但有时 API 返回的 JSON 没有名为 name 的键,而键是 otherName - 因此我得到提示“keyNotFound”的错误。
有没有一种方法可以在我的结构或解析语句中添加一个条件语句来检查是否找不到密钥,如果没有,它使用我定义的另一个?
【问题讨论】:
-
您可以有 2 个可选属性:
let name: String?; let otherName: String?,当您想要访问该属性时,您可以使用计算属性:var nameToUse: String { name ?? otherName }?
标签: json swift struct jsondecoder