Swift 4 yeni Codable
protokolü ekledi . Kullandığımda JSONDecoder
, Codable
sınıfımın isteğe bağlı olmayan tüm özelliklerinin JSON'da anahtarlara sahip olmasını gerektiriyor gibi görünüyor veya bir hata veriyor.
Sınıfımın her özelliğini isteğe bağlı yapmak gereksiz bir güçlük gibi görünüyor, çünkü gerçekten istediğim şey json'daki değeri veya varsayılan bir değeri kullanmak. (Özelliğin sıfır olmasını istemiyorum.)
Bunu yapmanın bir yolu var mı?
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