Voici mon code. Mais je ne sais pas à quoi mettre la valeur. Cela doit être fait manuellement car la structure réelle est légèrement plus complexe que cet exemple.
Vous avez besoin d'aide?
struct Something: Decodable {
value: [Int]
enum CodingKeys: String, CodingKeys {
case value
}
init (from decoder :Decoder) {
let container = try decoder.container(keyedBy: CodingKeys.self)
value = ??? // < --- what do i put here?
}
}
Votre code ne se compile pas en raison de quelques erreurs/fautes de frappe.
Pour décoder un tableau de Int
écrire
struct Something: Decodable {
var value: [Int]
enum CodingKeys: String, CodingKey {
case value
}
init (from decoder :Decoder) throws {
let container = try decoder.container(keyedBy: CodingKeys.self)
value = try container.decode([Int].self, forKey: .value)
}
}
Mais si l'exemple de code dans la question représente la structure entière, il peut être réduit à
struct Something: Decodable {
let value: [Int]
}
car l'initialiseur et le CodingKeys
peuvent être déduits.
Merci pour le conseil de Joshua Nozzi. Voici comment j'implémente pour décoder un tableau d'Int:
let decoder = JSONDecoder()
let intArray = try? decoder.decode([Int].self, from: data)
sans décodage manuel.
Ou vous pouvez le faire de manière générique:
let decoder = JSONDecoder()
let intArray:[Int] = try? decoder.decode(T.self, from: data)