【发布时间】:2017-11-18 09:46:42
【问题描述】:
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
【问题讨论】:
-
如果我的 json 中有多个键并且我想编写一个通用方法来映射 json 以创建对象而不是给出 nil 它应该至少给出默认值,我该怎么办。class="comcopy">跨度>