如何设计可编码的JSON字段,可以是空字符串或int

时间:2017-09-24 16:04:00

标签: json swift field codable

如何处理来自JSON的可编码结构的字段,可以是空字符串还是int?我尝试使用数据类型,但不符合可编码。我认为如果它没有值,那么它返回一个空字符串,否则返回一个int。我正在使用Swift 4和XCode 9.提前感谢

1 个答案:

答案 0 :(得分:2)

我真的建议更改该Web服务以一致地返回值(如果整数类型没有值,则不返回该键的任何内容)。

但是如果你坚持使用这种设计,你将不得不编写自己的init(from:),它可以优雅地处理解析整数值的失败。 E.g:

struct Person: Codable {
    let name: String
    let age: Int?

    init(from decoder: Decoder) throws {
        let values = try decoder.container(keyedBy: CodingKeys.self)
        name = try values.decode(String.self, forKey: .name)
        do {
            age = try values.decode(Int.self, forKey: .age)
        } catch {
            age = nil
        }
    }

}

我还建议不要使用0作为“没有提供整数值”的标记值。这是选项的用途。