如何手动解码 swift 4 Codable 中的数组?
How to manually decode an an array in 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?
}
}
由于一些错误/拼写错误,您的代码无法编译。
解码数组 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
可以被推断出来。
感谢 Joshua Nozzi 的提示。下面是我实现解码 Int 数组的方法:
let decoder = JSONDecoder()
let intArray = try? decoder.decode([Int].self, from: data)
无需手动解码。
或者你可以做通用的:
let decoder = JSONDecoder()
let intArray:[Int] = try? decoder.decode(T.self, from: data)
Swift 5.1
就我而言, 非常有帮助
我有一个 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)
这是我的代码。但我不知道将值设置为什么。必须手动完成,因为实际结构比这个例子稍微复杂一些。
有什么帮助吗?
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
可以被推断出来。
感谢 Joshua Nozzi 的提示。下面是我实现解码 Int 数组的方法:
let decoder = JSONDecoder()
let intArray = try? decoder.decode([Int].self, from: data)
无需手动解码。
或者你可以做通用的:
let decoder = JSONDecoder()
let intArray:[Int] = try? decoder.decode(T.self, from: data)
Swift 5.1
就我而言,
我有一个 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)