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

