gpt4 book ai didi

json - 单个实体的 Swift 可编码动态键

转载 作者:行者123 更新时间:2023-11-30 10:35:50 25 4
gpt4 key购买 nike

我的 JSON:

    "Filters": [
{ "filter": "View by",
"products": [
{ "id": 1,
"views": 56700
},
{"id": 2,
"views": 60000
}
]
},
{ "filter": "Ordered by",
"products": [
{ "id": 1,
"orders": 5600
},
{ "id": 2,
"orders": 4300
}
]
}
]

到目前为止,以下结构对我有用,但不太容易使用

struct Filter: Codable {
let filter: String
let products: [[String: Int]]
}

是否可以仅为产品对象的某些部分创建通用 key 结构?

简而言之,是否可以仅对“订单”和“ View ”应用通用结构,而不对 id 应用通用结构?

例如:类似这样的事情

struct Filter: Codable {
let filter: String
let products: [Product]
}

struct Product: Codable {
let id: Int
let _____: [String: Int] // Some unknown variable
}

最佳答案

你可以这样写:

protocol Product: Codable {
var id: Int {get}
}
struct ProductByView: Product {
let id: Int
let views: Int
}
struct ProductByOrder: Product {
let id: Int
let orders: Int
}

struct Filter: Codable {
let filter: String
let products: [Product]

init(from decoder: Decoder) throws {
//...
}

func encode(to encoder: Encoder) throws {
//...
}
}

但是,实现 Filter.init(from:)Filter.encode(to:) 会有点复杂。

根据您的情况,您可以使用以下简化的解决方法:

struct Product: Codable {
let id: Int
let views: Int?
let orders: Int?
//... you may need more?
}
struct Filter: Codable {
let filter: String
let products: [Product]
}

关于json - 单个实体的 Swift 可编码动态键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58055404/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com