我有一些从服务器接收到的json结果。他们都有一个共享的部分。之后,在results
属性中,返回值有所不同。
{
"code": 200,
"status": "Ok"
"data":
{
"count": 3,
"total": 7,
"results": [
{
"id": 43424,
"title": "some title"
}
]
}
}
正如我所说,所有模型的结构都相同。它们的区别仅在于results
。我想要做的是避免编写冗余代码,并使用继承创建一个具有所有共享节的BaseClass
,而我的模型继承了此BaseClass
。我已经看过Decodable
模型中有关继承的一些教程和文章,但是我仍然对如何实现它感到迷惑。
答案 0 :(得分:1)
而不是继承和类使用泛型和结构,因为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) }