【问题标题】:Fail to decode JSON because the model is Identifiable无法解码 JSON,因为模型是可识别的
【发布时间】:2021-06-17 10:58:28
【问题描述】:

我有一个这样的 JSON

[
 {
   "name": "car",
   "color": "red"
 },
 {
   "name": "bike",
   "color": "blue"
 },
  ... etc
]

我有这个模型可以在解码过程中使用

struct Element:Codable {
  var name:String?
  var color:String?
}

稍后在代码中我有一个像这样的ScrollView

 ScrollView(.vertical, showsIndicators: false) {
        LazyVGrid(columns: gridItemLayout, alignment: .center, spacing: 10, content: {
          ForEach(allElements) { element in

allElementsElement 的数组。

因为我在那里使用allElements,所以我必须使Element 可识别...

struct Element:Codable, Identifiable {
  var id = UUID()
  var name:String?
  var color:String?
}

现在它无法解码 JSON,因为 JSON 没有id

我已经尝试添加

"id" : "",

对 JSON 上的所有元素都没有成功。

有什么想法吗?

【问题讨论】:

    标签: json swift codable


    【解决方案1】:

    您只需要告诉编译器 id 不是 JSON 的一部分。您可以通过在您的 Codable 类型上声明符合 CodingKeyenum 来做到这一点。

    合成的Codable 方法将仅使用符合CodingKeyenum 中的键来解码/编码您的类型。因此,如果您从enum 中省略了id,而仅指定namecolor,则Codable 不会尝试在JSON 中查找id 键。

    struct Element: Codable, Identifiable {
        let id = UUID()
        var name:String?
        var color:String?
        
        private enum CodingKeys: String, CodingKey {
            case color
            case name
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多