为什么#Codable#在下面的代码中不起作用?



我有以下代码来测试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
}

相关内容

最新更新