我有一些从服务器接收到的 json 结果。他们都有一个共享部分。然后在 results
属性中,返回值不同。
{
"code": 200,
"status": "Ok"
"data":
{
"count": 3,
"total": 7,
"results": [
{
"id": 43424,
"title": "some title"
}
]
}
}
正如我所说,我所有模型的结构都是相同的。它们仅在 results
上不同。我想做的是避免编写冗余代码,并使用继承来创建一个具有所有共享部分的 BaseClass
,我的模型继承这个 BaseClass
。我看过一些关于 Decodable
模型中的继承的教程和帖子,但我仍然不清楚如何实现它。
最佳答案
而不是继承和类使用泛型和结构,因为Decodable
默认不支持继承。
例如创建一个结构JSONParser
struct JSONParser<T : Decodable> {
struct ResponseData<U : Decodable> : Decodable {
let total, count : Int
let results : [U]
}
let code : Int
let status : String
let data : ResponseData<T>
init(data: Data) throws {
let decoder = JSONDecoder()
data = try decoder.decode(ResponseData.self, from: data)
}
}
并将其用于包含id
和title
的字典
struct Item {
let id : Int
let title : String
}
do {
let jsonParser = try JSONParser<Item>(data: data)
let results = jsonParser.data.results
} catch { print(error) }
关于swift - 如何在可解码模型中使用继承,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56839613/