【发布时间】:2022-01-08 14:14:38
【问题描述】:
所以我有这个简单的 json 响应:
{
"gender": "male",
"name": {
"title": "mr",
"first": "brad",
"last": "gibson"
}
}
这是我的客户解码器:
struct UserModel: Decodable {
var gender: String
var title: String?
var first: String?
var last: String?
// Top-level coding keys
enum CodingKeys: String, CodingKey {
case name, gender
}
enum NameKeys: CodingKey {
case title, first, last
}
init(from decoder: Decoder) throws {
let container = try decoder.container(keyedBy: CodingKeys.self)
gender = try container.decode(String.self, forKey: .gender)
let name = try container.nestedContainer(keyedBy: NameKeys.self, forKey: .name)
title = try name.decodeIfPresent(String.self, forKey: .title)
first = try name.decodeIfPresent(String.self, forKey: .first)
last = try name.decodeIfPresent(String.self, forKey: .last)
}
}
如果嵌套对象名称(title、first、last)中的一个键未发送,我知道如何处理错误情况。我的问题是,如果没有从响应中发回“名称”对象,我将如何编写一些内容来防止崩溃?
【问题讨论】:
-
创建一个嵌套的
Codable类型。你需要哪些参数,就gender? -
是的,例如,假设由于某种原因“姓名”没有在响应中发送,而只是返回了性别,它会崩溃。
-
名称是否应该总是包含
title、first和last?目前它只是将它们默认为空字符串而不是nil -
已更新,因此它们为零 @George
-
顺便说一句
?? nil是多余的
标签: ios json swift networking decoding