当你里面有模型时,如何在可编码中使用 init 方法?



这个代码世界中的新内容,提前感谢,

我收到错误

无法将类型"字符串?"的值分配给类型"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类型的属性。

因此,要解决错误,您应该说要获取键.value3ModalC类型的值。为此,您应该像这样传递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 信息。

相关内容

  • 没有找到相关文章

最新更新