带编码的初始化失败

时间:2019-06-23 10:44:27

标签: swift codable

我正在尝试解析以下项数组的json模式,itemID可能不为空。如何使项目nil id itemID在JSON中不存在?

[{
    "itemID": "123",
    "itemTitle": "Hello"
  },
  {},
  ...
]

我的可解码类如下:

public struct Item: : NSObject, Codable {
    let itemID: String
    let itemTitle: String?
}

private enum CodingKeys: String, CodingKey {
    case itemID
    case itemTitle
}

    required init(from decoder: Decoder) throws {
        let container = try decoder.container(keyedBy: CodingKeys.self)

        itemID = try container.decode(String.self, forKey: .itemID)
        itemTitle = try container.decodeIfPresent(String.self, forKey: .itemTitle)

        super.init()
    }
}

1 个答案:

答案 0 :(得分:0)

首先,在您的 itemID响应中,IntString而不是JSON。因此struct Item看起来像

public struct Item: Codable {
    let itemID: Int?
    let itemTitle: String?
}

JSON解析为

if let data = data {
    do {
        let items = try JSONDecoder().decode([Item].self, from: data).filter({$0.itemID == nil})
        print(items)
    } catch {
        print(error)
    }
}

在上面的代码中,您可以简单地使用filter itemID == nil删除项目。

相关问题