使用其他数据结构时FlightData主数据结构不兼容Decodable的解决方法
问题解决:Swift主结构不符合Codable协议的原因与修复
错误原因
你代码里的问题在于,每个属性都被赋值为数组类型的元类型(比如[Scheduled_Arrivals].self),而不是实际的数组实例。元类型本身并不遵循Codable协议,所以主结构AirportFlightData无法自动满足Codable要求。
修复方案
把属性改为声明对应数组类型,去掉.self的赋值,让属性指向具体的数组实例(可以是解码时赋值,或者给默认空数组):
方案1:依赖JSON解码赋值(无默认值)
struct AirportFlightData: Codable { let scheduled_arrivals: [Scheduled_Arrivals] let scheduled_departures: [Scheduled_Departures] let arrivals: [ArrivalData] let departures: [DepartureData] }
这种写法适用于从JSON数据解码时,后端会返回对应字段的值,解码过程会自动为这些属性赋值。
方案2:设置默认空数组
如果需要在没有解码数据时也能创建实例,可以给属性设置默认空数组:
struct AirportFlightData: Codable { let scheduled_arrivals: [Scheduled_Arrivals] = [] let scheduled_departures: [Scheduled_Departures] = [] let arrivals: [ArrivalData] = [] let departures: [DepartureData] = [] }
原理说明
因为你所有的子结构(Scheduled_Arrivals、Scheduled_Departures等)都已经遵循Codable协议,数组类型只要元素遵循Codable,数组本身就自动遵循Codable。所以只要主结构的属性是这些数组的实例,主结构就能自动满足Codable协议要求,不需要额外编写编码/解码逻辑。
内容的提问来源于stack exchange,提问作者TVProducer
相关产品推荐
相关产品推荐

