Swift 4 adicionou o novo Codable
protocolo. Quando eu uso JSONDecoder
, parece exigir que todas as propriedades não opcionais da minha Codable
classe tenham chaves no JSON ou ele gera um erro.
Tornar todas as propriedades da minha classe opcionais parece um aborrecimento desnecessário, pois o que eu realmente quero é usar o valor no json ou um valor padrão. (Não quero que a propriedade seja nula.)
Existe uma maneira de fazer isso?
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