我不知道在下面的代码中该设置什么值。它必须手动完成,因为实际结构比这个示例稍微复杂一些。
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?
}
}
由于一些错误/拼写错误,您的代码无法编译。
解码
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 Something: Decodable {
let value: [Int]
}
因为可以推断初始化器和
CodingKeys
。
感谢约书亚·诺齐的提示。以下是我如何实现解码 Int 数组:
let decoder = JSONDecoder()
let intArray = try? decoder.decode([Int].self, from: data)
无需手动解码。
就我而言,这个答案非常有帮助
我有一个 JSON,格式为:
"[ "5243.1659 EOS" ]"
因此,您可以在没有密钥的情况下解码数据
struct Model: Decodable {
let values: [Int]
init(from decoder: Decoder) throws {
var container = try decoder.unkeyedContainer()
let values = try container.decode([Int].self)
self.values = values
}
}
let decoder = JSONDecoder()
let result = try decoder.decode(Model.self, from: data)
或者你可以通用:
let decoder = JSONDecoder()
let intArray:[Int] = try? decoder.decode(T.self, from: data)