स्विफ्ट 4 ने नया Codable
प्रोटोकॉल जोड़ा । जब मैं इसका उपयोग JSONDecoder
करता हूं तो मुझे अपनी Codable
कक्षा के सभी गैर-वैकल्पिक गुणों की आवश्यकता होती है , जिसमें 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