Comment gérez-vous un champ d'une structure codable de JSON qui peut être une chaîne vide ou un int? J'ai essayé d'utiliser le type de données tout mais cela n'est pas conforme à codable. Je pense que s'il n'a pas de valeur alors il retourne une chaîne vide ou sinon, il retourne un int. J'utilise Swift 4 et XCode 9. Merci d'avanceComment concevoir un champ JSON codable qui peut être une chaîne vide ou un entier
Répondre
Je voudrais vraiment suggérer de changer ce service Web pour retourner des valeurs de manière cohérente (et s'il n'y a pas de valeur pour le type entier, ne rien retourner pour cette clé).
Mais si vous êtes bloqué avec cette conception, vous devrez écrire votre propre init(from:)
qui gère avec élégance l'échec d'analyser la valeur entière. .: par exemple
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
}
}
}
Je conseille également de ne pas utiliser 0
comme valeur sentinelle pour « aucune valeur entière fourni ». C'est ce que les options sont pour.
Merci pour votre aide. Je suppose que je vais devoir faire un long tour parce que je n'ai pas accès pour changer le serveur. –
Lol. Oui, nous avons tous été là, avec une interface discutable gérée par d'autres. – Rob
Quel est le type de ce champ dans votre type Swift? 'Int?' –
Oui, je voudrais utiliser un int pour ce champ. Si c'est une chaîne vide, je voudrais par défaut à 0 si possible ou nul. –