Swift 4 เพิ่มCodable
โปรโตคอลใหม่ เมื่อฉันใช้JSONDecoder
ดูเหมือนว่าต้องการให้คุณสมบัติที่ไม่ใช่ทางเลือกทั้งหมดของCodable
คลาสของฉันมีคีย์ใน JSON มิฉะนั้นจะเกิดข้อผิดพลาด
การทำให้ทุกคุณสมบัติของคลาสของฉันเป็นทางเลือกดูเหมือนจะเป็นเรื่องยุ่งยากโดยไม่จำเป็นเนื่องจากสิ่งที่ฉันต้องการจริงๆคือการใช้ค่าใน json หรือค่าเริ่มต้น (ฉันไม่ต้องการให้คุณสมบัติเป็นศูนย์)
มีวิธีทำไหม?
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