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



我有一些我从服务器接收的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)
    }
}

并将其用于包含 idtitle

的字典
struct Item {
    let id : Int
    let title : String 
}
do {
    let jsonParser = try JSONParser<Item>(data: data)
    let results = jsonParser.data.results
} catch { print(error) }

相关内容

  • 没有找到相关文章

最新更新