ios - 内部有模型时如何在可编码中使用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
属性是 type ModalC
,但是在解码时您试图解析String
值(传递String.self
给decodeIfPresent
方法时)。
decodeIfPresent
方法将可解码值的类型作为第一个参数。在您的情况下,decodeIfPresent
方法返回String
值,并且您尝试将String
值设置为类型的属性ModalC
。
因此,要解决该错误,您应该说您想要获取ModalC
key的类型值.value3
。为此,您应该ModalC.self
像这样通过:
value3 = try values.decodeIfPresent(ModalC.self, forKey: .value3)
推荐阅读
- database - 我们可以在同一张表上创建主索引和聚集索引吗?
- css - @-moz-document url-prefix() 的继承者
- c# - C#:使用字符串数组列表检查用户输入
- vue.js - 使用纯 vue js 的轮播
- cryptography - 如何制作DES s-box
- excel - 如何使 XMLHTTP 在 MAC 上工作
- wordpress - 如何将循环拆分为 2 个不同的 div 并通过每个 div 3 个帖子并重复它直到结束
- c# - 根据匹配条件从 5 个列表中查找匹配项
- javascript - 如何在 react-datetime-picker 中显示唯一的日期
- django - 如何使用 DJango Rest Framework 上传多个图像?