J'ai une API qui renvoie parfois une clé spécifique dans le JSON sous la forme d'un Int et d'autres fois, elle renvoie cette même clé sous la forme d'une String, je résous ce problème en créant un enum IntOrString. Le problème est que lorsque j'appelle l'API pour mettre à jour l'étiquette de ces clés spécifiques, le type est incorrect.
Ensuite, j'obtiens l'erreur "cannot convert type Double to type". DoubleOrString
enum DoubleOrString: Codable {
case double(Double)
case string(String)
init(from decoder: Decoder) throws {
let container = try decoder.singleValueContainer()
do {
self = try .double(container.decode(Double.self))
} catch DecodingError.typeMismatch {
do {
self = try .string(container.decode(String.self))
} catch DecodingError.typeMismatch {
throw DecodingError.typeMismatch(
DoubleOrString.self,
DecodingError.Context(
codingPath: decoder.codingPath,
debugDescription: "Encoded payload conflicts with expected type, (Double or String)"
)
)
}
}
}
func encode(to encoder: Encoder) throws {
var container = encoder.singleValueContainer()
switch self {
case .double(let double):
try container.encode(double)
case .string(let string):
try container.encode(string)
}
}
}
Plus bas, c'est là que je mets à jour mon étiquette.
self.ageLabel.text = "\(pData.info.detailedInfo?.ageNumber ?? 0.0)"