2017-07-01 52 views
3

這是我的代碼。但我不知道該如何設定價值。它必須手動完成,因爲實際結構比這個例子稍微複雜一些。如何在swift 4 Codable中手動解碼數組?

請幫忙嗎?

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? 
    } 
} 

回答

10

由於出現一些錯誤/拼寫錯誤,您的代碼無法編譯。

爲了解碼的陣列的Int

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) 
    } 
} 

但是,如果在問題的樣本代碼表示整個struct它可以減少到

struct Something: Decodable { 
    let value: [Int] 
} 

因爲初始化和可以推斷出CodingKeys

+2

謝謝..我正在嘗試'[Int.self]'。沒有意識到'.self'必須在外面 –

+2

我相信你也可以指定'Array.self'和'Array .self'(例如'[Int] .self')將從'值的聲明類型。 –

0

感謝約書亞諾齊的暗示。下面是我如何實現解碼一個Int數組:

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

沒有手動解碼。