你如何设计一个可以是空字符串或整数的可编码 JSON 字段
How do you design a codable JSON field which can be either an empty string or an int
如何处理来自 JSON 的可编码结构的字段,它可以是空字符串或整数?我尝试使用数据类型 any 但不符合可编码。我认为,如果它没有值,那么它 returns 是一个空字符串,否则,它 returns 是一个 int。我正在使用 Swift 4 和 XCode 9。提前致谢
我真的建议将该 Web 服务始终更改为 return 值(如果整数类型没有值,则不要 return 该键的任何值)。
但是如果您坚持使用这种设计,则必须编写自己的 init(from:)
以优雅地处理解析整数值的失败。例如:
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
作为 "no integer value provided" 的标记值。这就是可选项的用途。
如何处理来自 JSON 的可编码结构的字段,它可以是空字符串或整数?我尝试使用数据类型 any 但不符合可编码。我认为,如果它没有值,那么它 returns 是一个空字符串,否则,它 returns 是一个 int。我正在使用 Swift 4 和 XCode 9。提前致谢
我真的建议将该 Web 服务始终更改为 return 值(如果整数类型没有值,则不要 return 该键的任何值)。
但是如果您坚持使用这种设计,则必须编写自己的 init(from:)
以优雅地处理解析整数值的失败。例如:
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
作为 "no integer value provided" 的标记值。这就是可选项的用途。