我从API获得响应并使用' JSONDecoder'来解析响应并且能够解析,但我想要排序的' FieldModel'根据'命令'键入"内容" " ContentModel"的对象我使用JSONDecoder解码时自动?
我对API的回应:
{content = (
{
fieldName = \"$.alcohol.beer\";
label = Beer;
order = 2;
},
{
fieldName = \"$.alcohol.wine\";
label = Wine;
order = 1;
},
{
fieldName = \"$.alcohol.any\”;
label = Wine;
order = 3;
}
);}
我的模特:
struct ContentModel: Codable {
var content: [FieldModel]?
}
struct FieldModel: Codable {
var fieldName: String?
var order: Int?
var label: String?
}
解码数据的代码:
let myFinalData = try JSONDecoder().decode(ContentModel.self, from: jsonData)
如何在使用上述代码解码后,按照订单键对ContentModel的内容进行排序?
答案 0 :(得分:2)
您可以通过为init(from decoder)
结构创建自定义ContentModel
方法来实现目标,您可以使用order
元素的FieldModel
属性来指定FieldModel
结构1}}到各自在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
}