Swift 4 a ajouté le nouveau Codable
protocole. Lorsque je l'utilise, JSONDecoder
il semble que toutes les propriétés non facultatives de ma Codable
classe aient des clés dans le JSON ou cela génère une erreur.
Rendre chaque propriété de ma classe facultative semble être un problème inutile car ce que je veux vraiment, c'est utiliser la valeur dans le json ou une valeur par défaut. (Je ne veux pas que la propriété soit nulle.)
Y a-t-il un moyen de faire cela?
class MyCodable: Codable {
var name: String = "Default Appleseed"
}
func load(input: String) {
do {
if let data = input.data(using: .utf8) {
let result = try JSONDecoder().decode(MyCodable.self, from: data)
print("name: \(result.name)")
}
} catch {
print("error: \(error)")
// `Error message: "Key not found when expecting non-optional type
// String for coding key \"name\""`
}
}
let goodInput = "{\"name\": \"Jonny Appleseed\" }"
let badInput = "{}"
load(input: goodInput) // works, `name` is Jonny Applessed
load(input: badInput) // breaks, `name` required since property is non-optional