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