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

Swift解析Marvel API时Decodable报错:期望数组却得到字典

解决Marvel API解码错误与缩略图获取技巧

解码错误修复

你的错误根源是Marvel API的返回结构并非直接是角色数组,而是嵌套多层的字典结构:根节点是字典,其中data字段包含角色列表所在的results数组。直接解码[ReturnedData].self会导致类型不匹配,因为实际根节点是字典而非数组。

正确的Decodable结构体定义

根据API返回结构,需要定义多层结构体来匹配层级:

// 匹配API根响应
struct MarvelAPIResponse: Decodable {
    let data: MarvelData
}

// 匹配data字段的结构
struct MarvelData: Decodable {
    let results: [Character]
}

// 角色结构体,可根据需求扩展字段
struct Character: Decodable {
    let id: Int?
    let name: String?
    let description: String?
    let thumbnail: Thumbnail? // 关联缩略图结构体
}

// 匹配thumbnail字段的结构
struct Thumbnail: Decodable {
    let path: String?
    let `extension`: String? // extension是Swift关键字,需加反引号转义
}

修改解码逻辑

更新网络请求中的解码代码,匹配新的结构体层级:

var savedData: [Character] = []

let urlString = "https://gateway.marvel.com/v1/public/characters?ts=1&apikey=\(myAPIKey)"
guard let url = URL(string: urlString) else { return }
let session = URLSession.shared

let dataTask = session.dataTask(with: url) { (data, response, error) in
    guard let data = data else { return }
    do {
        let receivedData = try JSONDecoder().decode(MarvelAPIResponse.self, from: data)
        self.savedData = receivedData.data.results
    } catch {
        print("解码错误:\(error)")
    }
}
dataTask.resume()

缩略图获取技巧

Marvel API返回的thumbnail包含path(图片路径)和extension(图片格式)两个字段,需拼接成完整URL使用:

  • 基础拼接方式:将path和extension用.连接,示例:
    if let thumbnail = character.thumbnail, let path = thumbnail.path, let ext = thumbnail.`extension` {
        let thumbnailURL = URL(string: "\(path).\(ext)")
        // 使用thumbnailURL加载图片
    }
    
  • 指定图片尺寸:Marvel支持在path后添加尺寸后缀,获取不同规格的图片,常用尺寸包括:
    • standard_small (65x45px)
    • standard_medium (100x100px)
    • portrait_xlarge (150x225px)
    • landscape_incredible (464x261px)
      示例拼接:
    let thumbnailURL = URL(string: "\(path)/portrait_xlarge.\(ext)")
    
  • 处理缺失图片:部分角色可能没有缩略图,需提前判断thumbnail、path、extension是否为nil,避免空指针错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 20:15:41