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

Swift中[Codable]数组为何无法使Storage结构体遵循Codable协议?

编译错误原因分析:Storage不符合Codable协议的深层原因

苹果官方文档关于Codable的说明:

当Array、Dictionary和Optional包含可编码类型时,这些内置类型也遵循Codable协议。

但以下代码会出现编译错误,提示Storage不符合Codable协议:

struct Storage: Codable {
    var data: [Codable]
}

错误核心原因:

  • Codable是协议类型,而非具体类型。苹果文档里说的“包含可编码类型”,指的是数组中存放的是具体的、明确遵循Codable的类型(比如[String]、[Int],或是你自定义的遵循Codable的结构体数组),而不是协议本身的数组。
  • Swift自动合成Codable实现的前提是,所有属性的类型必须是确定的具体类型——编译器需要明确知道怎么对这个类型进行编码和解码。但[Codable]这种类型可以存放任意遵循Codable的对象(比如String、Int、自定义Model),编译器无法在解码阶段确定要把JSON数据转换成哪种具体类型,自然没法自动生成符合要求的encode/decode方法。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 15:57:04