这个代码世界中的新内容,提前感谢,
我收到错误
无法将类型"字符串?"的值分配给类型"ModalA.ModalC?">
这是我的模型课,
struct ModalA: Codable {
struct ModalB: Codable {
let value2: String?
let value3: ModalC?
private enum CodingKeys: String, CodingKey {
case value3 = "Any"
case value2 = "Anything"
}
init(from decoder: Decoder) throws {
let values = try decoder.container(keyedBy: CodingKeys.self)
value2 = try values.decodeIfPresent(String.self, forKey: .value2)
value3 = try values.decodeIfPresent(String.self, forKey: .value3) // getting error on this line
}
}
struct ModalC: Codable {
let value3: String?
}
let value1: ModalB?
}
如何解决此错误?
您的value3
属性属于ModalC
类型,但在解码时,您尝试解析String
值(将String.self
传递给decodeIfPresent
方法时(。
decodeIfPresent
方法将可解码值的类型作为第一个参数。在您的情况下decodeIfPresent
该方法返回String
值,并且您正在尝试String
值设置为ModalC
类型的属性。
因此,要解决错误,您应该说要获取键.value3
的ModalC
类型的值。为此,您应该像这样传递ModalC.self
:
value3 = try values.decodeIfPresent(ModalC.self, forKey: .value3)
你可以通过以下方式解决这个问题
value3 = try values.decodeIfPresent(ModalC.self, forKey: .value3)
但将值 3 声明为可选
let value3: ModalC?
如果它最初存在于解析的 JSON 中,将获取它,因此?
就足够
你应该使用
init(){
}
init(from decoder: Decoder) throws{
}
你可以在这里阅读我的帖子以获取 MOR 信息。