Swift 4 đã thêm Codable
giao thức mới . Khi tôi sử dụng, JSONDecoder
nó dường như yêu cầu tất cả các thuộc tính không phải tùy chọn của Codable
lớp tôi phải có khóa trong JSON hoặc nó gây ra lỗi.
Làm cho mọi thuộc tính của lớp tôi là tùy chọn có vẻ như là một rắc rối không cần thiết vì những gì tôi thực sự muốn là sử dụng giá trị trong json hoặc một giá trị mặc định. (Tôi không muốn tài sản là con số không.)
Có cách nào để làm việc này không?
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