Swift 4 a ajouté le nouveau protocole Codeable
. Lorsque j'utilise JSONDecoder
il semble que toutes les propriétés non facultatives de ma classe Codeable
aient des clés dans le JSON, sinon une erreur est renvoyée.
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 du 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