Swift 如何在可解码模型中使用继承

Swift 如何在可解码模型中使用继承,swift,decodable,Swift,Decodable,我从服务器收到了一些json结果。它们都有一个共享部分。之后,在results属性中,返回的值不同 { "code": 200, "status": "Ok" "data": { "count": 3, "total": 7, "results": [ { "id": 43424,

我从服务器收到了一些json结果。它们都有一个共享部分。之后,在results属性中,返回的值不同

{
    "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) }