2017-10-19 171 views
-2

我想在我的模型的init中解析json文件。我希望它採用URL並初始化所有存儲的屬性。像:在init中解析json,使用可解碼協議

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

所以問題是,我該怎麼辦呢?我試圖做這樣說:

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

,但它只是創建一個新的對象,似乎是一個錯誤的決定。

謝謝。

+0

自我=嘗試JSONDecoder ... –

+0

順便說一下你的初始化將需要拋出更好,而不是使用網址 –

回答

0

我創建了那種你想要的init可編碼結構:

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

數據刪除了嗎嘗試抓住並使你的初始投擲。創建一個無用的對象沒有任何意義 –

+0

Btw你的編碼鍵枚舉是多餘的(毫無意義的) –

+0

Btw爲什麼你會發現錯誤,如果你不會使用它。更好地做出錯誤的初始化程序 –