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

Swift中HttpPOST请求后Response无法赋值给字典的原因咨询

错误原因及解决办法

错误原因

你定义的asd是[String: Any]类型的字典,但通过JSONDecoder解析接口响应后得到的response是自定义的Response结构体实例——Swift是强类型语言,完全不同的类型不能直接赋值,所以抛出类型不匹配的错误。

解决办法

方案一:推荐——修改asd的类型为Response?

直接把全局变量asd的类型改成你的Response结构体的可选型,这样就能直接赋值解析后的实例,还能享受结构体的类型安全:

// 替换原来的Dictionary<String, Any>定义
public var asd: Response?

之后赋值代码asd = response就能正常运行,后续访问响应数据时可以直接用asd?.logOk、asd?.token这种写法,比字典更直观不易出错。

方案二:如果必须用字典——将Response实例转为字典

如果业务确实需要字典类型,可以把解析后的Response实例重新编码为Data,再转成字典:

do {
    let response = try JSONDecoder().decode(Response.self, from: data)
    // 先把Response转成Data,再转成字典
    let responseData = try JSONEncoder().encode(response)
    if let dict = try JSONSerialization.jsonObject(with: responseData, options: []) as? [String: Any] {
        asd = dict
    }
    print("SUCCESS: \(response)")
} catch {
    print(error)
}

不过这种方式多了一次编码解码的开销,不如直接用结构体高效规范。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 23:22:08