2017-10-19 10 views
-2

Je voudrais analyser le fichier json dans init de mon modèle. Je veux qu'il prenne l'URL et initialise toutes les propriétés stockées. Comme:Parse json dans init, en utilisant le protocole Decodable

init(from url: URL) { ... },

la question est donc comment puis-je le faire? J'ai essayé de le faire de cette façon:

let info = try JSONDecoder().decode(Model.self, from: data),

mais il crée juste un nouvel objet et semble être une mauvaise décision.

Merci.

+0

auto = essayer JSONDecoder ... –

+0

BTW init aurait besoin de jeter et de mieux utiliser les données au lieu d'URL –

Répondre

0

J'ai créé un struct codable avec le genre init vous voulez:

struct NameObject: Codable { 
    let id: Int 
    let name: String 
    enum CodingKeys: String, CodingKey { 
     case id 
     case name 
    } 

    init(id: Int, name: String) { 
     self.id = id 
     self.name = name 
    } 

    init(withData data: Data) { 
     do { 
      self = try JSONDecoder().decode(NameObject.self, from: data) 
     } catch { 
      self.id = 0 
      self.name = "unknown" 
      // error 
     } 
    } 
} 
+0

Retirez le do essayez d'attraper et de faire votre lancer init. Créer un objet inutile n'a aucun sens –

+0

Btw vos clés de codage énumération est redondante (inutile) –

+0

Btw pourquoi attraperiez-vous l'erreur si vous ne l'utiliserez pas. Mieux vaut faire un initialiseur faillible –