So I have this simple json response:
{
"gender": "male",
"name": {
"title": "mr",
"first": "brad",
"last": "gibson"
}
}
And this is my customer decoder:
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)
}
}
I know how to handle the error scenarios if one of the keys inside the nested object name (title, first, last) isn't sent. My question is how would I write something to prevent a crash if the "name" object is not sent back from the response?