Swift 4 menambahkan Codable
protokol baru . Ketika saya menggunakannya JSONDecoder
, tampaknya memerlukan semua properti non-opsional Codable
kelas saya untuk memiliki kunci di JSON atau itu membuat kesalahan.
Membuat setiap properti kelas saya opsional sepertinya merepotkan yang tidak perlu karena yang saya inginkan adalah menggunakan nilai di json atau nilai default. (Saya tidak ingin properti menjadi nihil.)
Apakah ada cara untuk melakukan ini?
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