Swift 4 hinzugefügt das neue Codeable
Protokoll. Wenn ich JSONDecoder
verwende, scheint es, dass alle nicht-optionalen Eigenschaften meiner Klasse Codeable
Schlüssel im JSON benötigen oder einen Fehler auslösen.Mit JSONDecoder in Swift 4, können fehlende Schlüssel einen Standardwert verwenden, anstatt optionale Eigenschaften zu sein?
Jede Eigenschaft meiner Klasse optional zu machen scheint eine unnötige Hektik zu sein, da das, was ich wirklich will, ist, den Wert in der JSON oder einen Standardwert zu verwenden. (Ich möchte nicht, dass die Eigenschaft null ist.)
Gibt es eine Möglichkeit, dies zu tun?
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
Eine weitere Abfrage, was kann ich tun, wenn ich mehrere Schlüssel in meinem JSON habe und ich eine generische Methode schreiben möchte, um JSON zuzuordnen, um ein Objekt zu erstellen, anstatt nil zu geben, sollte es g ive Standardwert atleast. –