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

SwiftUI使用ForEach显示解码后JSON字典出现类型转换错误如何解决

问题原因
  • 遍历对象错误:你代码中传入ForEach的country.id是无效值,country是[String: String]类型的字典,不存在id属性,且你需要遍历的是字典内的所有键值对,而非其他对象。
  • 重载匹配错误:当传入的参数不符合ForEach的可遍历序列要求时,SwiftUI错误匹配到了需要Binding类型参数的ForEach重载,因此抛出Cannot convert value of type '[String : String]' to expected argument type 'Binding'的错误提示。
  • 取值逻辑错误:你在ForEach闭包中把遍历得到的元素当作Country实例调用.countries属性,实际遍历字典得到的是单个键值对,不存在该属性。
修复代码

仅需要修改ContentView中的ForEach逻辑即可,原有数据结构、请求类无需调整:

struct ContentView: View { 
    @StateObject var api = APICALL()
    
    var body: some View {
        VStack(alignment: .leading) {
            // 遍历字典的键值对,以国家代码key作为唯一标识
            ForEach(api.storedData.countries.sorted(by: <), id: \.key) { key, value in
                HStack(alignment: .top) {
                    // key为国家二字码,value为国家名称,按需展示即可
                    Text("\(value) (\(key))")
                }
            }
        }
        .onAppear {
            api.loadData()
        }
    }
}
补充说明

如果不需要保持字典结构,也可以在解码后将[String: String]的国家字典转为自定义模型数组使用,遍历逻辑会更直观,此处按你现有代码结构做最小改动即可满足需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 01:27:02