2017-07-01 342 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) 

没有手动解码。