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

Swift如何不使用Codable创建API响应对象类型及Decodable报错解决

不使用Codable的实现方案

你之前运行报错是因为[String: AnyObject]属于Swift字典类型,不支持类似TypeScript对象的点语法直接访问键值,必须通过下标逐层取值并做类型校验,示例代码如下:

do {
    guard let createMeetingResponse = try JSONSerialization.jsonObject(with: createMeetingData, options: []) as? [String: Any],
          let data = createMeetingResponse["data"] as? [String: Any],
          let id = data["id"] as? String,
          let name = data["name"] as? String,
          let email = data["email"] as? String else {
        return
    }
    // 取值成功后直接使用对应变量即可
    print(id)
} catch {
    print("JSON解析失败:\(error)")
}

这种方案不需要定义响应结构体,但是嵌套层级深的时候需要写大量类型判断代码,维护成本很高,更推荐使用Codable方案。


Decodable报错修复方案

你遇到的Type 'CreateMeetingResponse' does not conform to protocol 'Decodable'报错,原因是嵌套的MeetingResponse结构体没有遵守Decodable协议,编译器无法自动完成解析逻辑,修改后的结构体代码如下:

struct MeetingResponse: Decodable {
    let id: String
    let name: String
    let email: String
}

struct CreateMeetingResponse: Decodable {
    let data: MeetingResponse
}

对应的解析代码示例:

do {
    let response = try JSONDecoder().decode(CreateMeetingResponse.self, from: createMeetingData)
    // 可以直接用点语法取值,和TypeScript的使用习惯一致
    print(response.data.id)
    print(response.data.name)
    print(response.data.email)
} catch {
    // 解析失败时可直接打印错误查看具体原因
    print("响应解析失败:\(error)")
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 09:42:04