我正在从 API 获取响应,并将使用“JSONDecoder”解析响应并能够解析,但我想要根据“ContentModel”自动的“content”对象中的“order”键排序“FieldModel”数组我使用 JSONDecoder 进行解码?
My response from API:
{content = (
{
fieldName = \"$.alcohol.beer\";
label = Beer;
order = 2;
},
{
fieldName = \"$.alcohol.wine\";
label = Wine;
order = 1;
},
{
fieldName = \"$.alcohol.any\”;
label = Wine;
order = 3;
}
);}
My models:
struct ContentModel: Codable {
var content: [FieldModel]?
}
struct FieldModel: Codable {
var fieldName: String?
var order: Int?
var label: String?
}
Code for decode the data:
let myFinalData = try JSONDecoder().decode(ContentModel.self, from: jsonData)
使用上面的代码解码后如何获得 ContentModel 的内容将根据顺序键排序?
最佳答案
您可以通过为您的 ContentModel
结构创建自定义 init(来自解码器)
方法(在其中使用 order
属性)来实现您的目标FieldModel
元素,将 FieldModel
分配到 content
数组中各自的位置。
我还建议将结构的所有字段设置为不可变且非可选,除非您有充分的理由不这样做。
struct ContentModel: Codable {
let content: [FieldModel]
private enum CodingKeys: String, CodingKey {
case content
}
init(from decoder:Decoder) throws {
let container = try decoder.container(keyedBy: CodingKeys.self)
let content = try container.decode([FieldModel].self, forKey: .content)
var orderedContent = content
for element in content {
orderedContent[element.order-1] = element
}
self.content = orderedContent
}
}
struct FieldModel: Codable {
let fieldName: String
let label: String
let order: Int
}
关于swift - 如何使用 JSONDecoder 根据顺序键获取排序数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50076639/