если let id = product.id {print (id) // 0}, я хочу преобразовать это значение id в Float, но оно имеет метадатип, может кто-нибудь дать представление об этом ... или как мне использовать функцию кодера для получить значение int из этого
я есть API, который иногда возвращает определенный ключ (в этом случаеid
) в JSON как Int и в других случаях он возвращает тот же ключ, что и строка. Как мне использовать codable для разбора этого JSON?
struct GeneralProduct: Codable {
var price:Double!
var id:String?
var name:String!
private enum CodingKeys: String, CodingKey {
case price = "p"
case id = "i"
case name = "n"
}
init(price:Double? = nil, id: String? = nil, name: String? = nil) {
self.price = price
self.id = id
self.name = name
}
}
Я продолжаю получать это сообщение об ошибке:Expected to decode String but found a number instead
, Причина, по которой он возвращает число, заключается в том, что поле id пустое, а когда поле id пустое, по умолчанию возвращается 0 в качестве идентификатора, который кодируется идентифицируется как число. Я могу игнорировать ключ идентификации, но кодируемый не дает мне возможности игнорировать его, насколько мне известно. Что было бы лучшим способом справиться с этим?
Вот JSON. Это супер просто
Работает
{
"p":2.12,
"i":"3k3mkfnk3",
"n":"Blue Shirt"
}
Ошибка - потому что в системе нет идентификатора, он возвращает 0 как значение по умолчанию, которое кодируемый, очевидно, видит как число, противоположное строке.
{
"p":2.19,
"i":0,
"n":"Black Shirt"
}