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

使用其他数据结构时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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 08:45:34