我有以下代码来测试Codable
协议和JSONDecoder
。
import UIKit
class ClassA: Codable {
var age: Int = 1
}
class ClassB: Codable {
var ageInfo: ClassA?
var name: String
}
let json4 = """
{
"ageInfo": {},
"name": "Jack"
}
""".data(using: .utf8)!
do {
let d = try JSONDecoder().decode(ClassB.self, from: json4)
} catch let err {
print(err)
}
我的问题是,为什么 json4 不能解码?或者我如何解码json4?
ClassA
中的age
被声明为非可选,因此需要键,但在 JSONageInfo
中为空。
错误是
没有与键关联的值 编码键(字符串值:"年龄"(
将age
声明为可选
var age: Int?
或在 JSON 中插入键值对
{
"ageInfo": {"age" : 1},
"name": "Jack"
}
你的 ClassB 有这个:
var ageInfo: ClassA?
但这对这个 JSON 没有帮助:
"ageInfo": {}
问题是ageInfo
存在,但它也是一个空字典。所以有一个A类,但它不符合你对A类的定义!
改变
class ClassA: Codable {
var age: Int = 1
}
自
class ClassA: Codable {
var age: Int? = 1
}