Swift 如何在可解码模型中使用继承
我从服务器收到了一些json结果。它们都有一个共享部分。之后,在results属性中,返回的值不同Swift 如何在可解码模型中使用继承,swift,decodable,Swift,Decodable,我从服务器收到了一些json结果。它们都有一个共享部分。之后,在results属性中,返回的值不同 { "code": 200, "status": "Ok" "data": { "count": 3, "total": 7, "results": [ { "id": 43424,
{
"code": 200,
"status": "Ok"
"data":
{
"count": 3,
"total": 7,
"results": [
{
"id": 43424,
"title": "some title"
}
]
}
}
正如我所说,我的所有模型的结构都是相同的。他们只是在结果上有所不同。我想做的是避免编写冗余代码,并使用继承创建一个基类,该基类具有所有共享部分,并且我的模型继承该基类。我看过一些关于可解码模型中继承的教程和帖子,但我仍然不清楚如何实现它。而不是继承,类使用泛型和结构,因为默认情况下可解码不支持继承 例如,创建一个结构JSONParser
我将使用通用包装器而不是继承。有关类似的内容,请参见:解释结果部分的差异以及您想要的内容achieve@dan在这种情况下,我宁愿坚持inheritance@JoakimDanielson假设我们有一个结果中有id和标题的模型。B模型在结果中有类型和项。这样,每次我需要整个objectcode、status、total和count时,我都必须使用JSONParser。你得到整个对象,只有结果的类型JSONParser的泛型类型不同。我得到了,但如果我想创建它的实例,我必须这样声明:让myModel:JSONParser,它看起来有点不直接。顺便说一句,这是一个优雅的方式。这只是一个例子。您可以使用其他东西重命名外部对象JSONParser,例如Base,并删除init方法。然后解码Base.self,得到一个对象基
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)
}
}
struct Item {
let id : Int
let title : String
}
do {
let jsonParser = try JSONParser<Item>(data: data)
let results = jsonParser.data.results
} catch { print(error) }