Skip to content

Commit 5d2984b

Browse files
committed
deal with unsupported data format
1 parent b6de842 commit 5d2984b

1 file changed

Lines changed: 29 additions & 0 deletions

File tree

AnimalsApp/AnimalsApp/Models/Animals.swift

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,14 @@ struct Animal: Codable {
3232
case image
3333
case createdAt = "created_at"
3434
case updatedAt = "updated_at"
35+
36+
// init(from decoder: Decoder) throws {
37+
// let label = try decoder.singleValueContainer().decode(String.self)
38+
// self = CodingKeys(rawValue: label) ?? .unsupported
39+
// }
3540
}
41+
42+
3643
}
3744

3845
extension Animal {
@@ -44,3 +51,25 @@ extension Animal {
4451
return imageURL
4552
}
4653
}
54+
55+
extension Animal {
56+
init(from decoder: Decoder) throws {
57+
let values = try decoder.container(keyedBy: CodingKeys.self)
58+
59+
if let resultInt = try? values.decodeIfPresent(Int.self, forKey: .age) {
60+
age = resultInt
61+
} else {
62+
if let resultString = try? values.decodeIfPresent(String.self, forKey: .age) {
63+
age = Int(resultString) ?? 0
64+
}
65+
}
66+
67+
id = try values.decode(String.self, forKey: .id)
68+
name = try values.decodeIfPresent(String.self, forKey: .name)
69+
description = try values.decodeIfPresent(String.self, forKey: .description)
70+
species = try values.decodeIfPresent(String.self, forKey: .species)
71+
image = try values.decodeIfPresent(String.self, forKey: .image)
72+
createdAt = try values.decode(String.self, forKey: .createdAt)
73+
updatedAt = try values.decode(String.self, forKey: .updatedAt)
74+
}
75+
}

0 commit comments

Comments
 (0)