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

标签 swift decodable

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

{
    "code": 200,
    "status": "Ok"
    "data": 
        {
            "count": 3,
            "total": 7,
            "results": [
                {
                    "id": 43424,
                    "title": "some title"
                }
            ]

        }
}

正如我所说,我所有模型的结构都是相同的。它们仅在 results 上不同。我想做的是避免编写冗余代码,并使用继承来创建一个具有所有共享部分的 BaseClass,我的模型继承这个 BaseClass。我看过一些关于 Decodable 模型中的继承的教程和帖子,但我仍然不清楚如何实现它。

最佳答案

而不是继承和使用泛型和结构,因为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) }

关于swift - 如何在可解码模型中使用继承,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56839613/

相关文章:

ios - Sprite Kit - SKSpriteNode 绘制在错误的位置

swift - 在 swift 4 中解码动态 JSON 结构

json - 在 Swift 中解码嵌套 JSON 对象的便捷方法?

ios - Swift 4 JSONDecoder 解码协议(protocol)类型

ios - 如何在 Swift 中添加多个泛型类型约束?

swift - 无法在 swift 中将字符串编码为 utf8,将 utf8 编码为 base64

swift - 如何在 block 外快速创建一个指向自身的弱指针

swift - 如何处理要在 swift 中作为 json 发送的空数组?

swift - 试图使此类可编码和可解码

swift - 如何在单元测试中访问类属性