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
相关产品推荐
相关产品推荐

