web-dev-qa-db-fra.com

Comment décoder manuellement un tableau dans Swift 4 Codable?

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?
   }
}
11
swift nub

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.

26
vadian

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.

5
denkeni

Ou vous pouvez le faire de manière générique:

let decoder = JSONDecoder()
let intArray:[Int] = try? decoder.decode(T.self, from: data) 
0
Illya Krit