You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Swift中Codable属性的iOS泛型问题:BaseJsonModel不遵循Codable协议

解决泛型结构体Codable协议不兼容问题

嘿,这个问题我之前在项目里也踩过坑!你遇到的Type 'BaseJsonModel' does not conform to protocol 'Codable'错误,核心原因是泛型类型T没有添加Codable协议约束。

为什么会报错?

Swift的Codable协议要求结构体里的所有存储属性都必须遵循Codable。你的BaseJsonStruct里,info是String类型(本身就符合Codable),但data是泛型T——编译器没办法保证任意传入的T都能满足Codable的编码/解码要求,所以直接判定整个结构体不符合Codable协议。

修复方案

只需要给泛型T加上Codable的约束,告诉编译器:只有遵循Codable的类型才能作为T传入。修改后的代码如下:

struct BaseJsonStruct<T: Codable>: Codable {
    let info: String
    let data: T
}

验证示例

假设你有一个自定义的用户模型,只要它也遵循Codable,就能正常和BaseJsonStruct配合使用:

// 自定义符合Codable的模型
struct User: Codable {
    let id: Int
    let username: String
}

// 创建并编码实例
let user = User(id: 101, username: "Ekra")
let response = BaseJsonStruct(info: "请求成功", data: user)

do {
    let jsonData = try JSONEncoder().encode(response)
    if let jsonStr = String(data: jsonData, encoding: .utf8) {
        print("编码后的JSON:\(jsonStr)")
    }
} catch {
    print("编码失败:\(error.localizedDescription)")
}

这样修改后,编译器就能自动为BaseJsonStruct合成Codable的实现,不会再报错啦!

内容的提问来源于stack exchange,提问作者Ekra

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 06:24:38