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

SwiftUI MVVM调用Rick and Morty API解码失败问题求助

问题排查与修复

核心问题:解码目标类型不匹配

Rick and Morty API的返回结构是包含info和results字段的顶层对象,对应你定义的Character结构体,但你在ViewModel中错误地直接将响应解码为[Result]数组,这直接导致了解码失败。

修复步骤

1. 修正ViewModel中的解码逻辑

修改getAllCharacters方法里的解码代码,先将响应解码为Character类型,再提取其中的results数组赋值给characters:

if let data = data,
   let characterResponse = try? decoder.decode(Character.self, from: data) {
    self?.characters = characterResponse.results
} else {
    self?.hasError = true
    self?.error = CharacterError.failedToDecode
}

2. 简化空值处理(可选但推荐)

你定义的JSONNull类可以用Swift原生可选类型替代,修改Info结构体:

struct Info: Codable {
    let count, pages: Int
    let next: String
    let prev: String? // 替换JSONNull?为String?
}

随后删除整个JSONNull类,Codable会自动处理prev字段为null的情况。

为什么教程API能正常工作?

教程中的API返回的是直接的数组结构(比如[User]),所以直接解码数组是正确的;而Rick and Morty API返回的是嵌套结构,必须先解码顶层对象再提取内部数组。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 11:37:02