我有一些我从服务器接收的JSON结果。他们都有一个共享的部分。之后,在results
属性中,返回值不同。
{
"code": 200,
"status": "Ok"
"data":
{
"count": 3,
"total": 7,
"results": [
{
"id": 43424,
"title": "some title"
}
]
}
}
正如我所说,我所有模型的结构都是相同的。它们仅在results
上有所不同。我要做的是避免编写冗余代码,并使用继承来创建一个具有共享部分的BaseClass
,而我的模型则继承了此BaseClass
。我已经看过一些有关Decodable
模型中继承的教程和帖子,但我仍然对如何实施它感到沮丧。
而不是继承和 class 使用generics和 structs ,因为 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) }