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

Swift嵌套JSON解析后TableView单元格标题赋值报错求助

解决嵌套JSON解析后TableView单元格赋值的类型不匹配问题

你遇到的问题核心很清晰:getData[indexPath.row].title是Title?类型(对应你定义的Codable嵌套结构体),而UILabel.text需要的是String?类型,直接赋值自然会触发类型不匹配的报错。我们只需要正确访问嵌套结构体里的rendered属性,同时妥善处理可选值即可解决。

步骤1:修正数据源类型

你代码里的private var getData = [DownloadJson]()明显是笔误,要和解析用的结构体保持一致,修改为:

private var getData = [JsonSosTalleres]()

步骤2:修改cellForRowAt中的赋值逻辑

在给标签赋值时,通过可选链访问Title结构体里的rendered属性,还可以用空合并运算符设置默认文本,避免标签显示空白:

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    guard let cell = tablaView.dequeueReusableCell(withIdentifier: "ofertcell") as? OfertasTableViewCell else {
        return UITableViewCell()
    }
    // 正确获取嵌套的标题内容
    let currentPost = getData[indexPath.row]
    cell.titlePost.text = currentPost.title?.rendered ?? "暂无标题"
    // 内容字段同理处理
    cell.contentPost.text = currentPost.content?.rendered ?? "暂无内容"
    return cell
}

补充:确保JSON解析逻辑正确

为了保证数据源能正确填充,你的DownloadJson方法解析部分应该类似这样(以URLSession为例):

func DownloadJson() {
    guard let targetUrl = URL(string: "你的JSON接口地址") else { 
        print("无效的URL")
        return 
    }
    
    URLSession.shared.dataTask(with: targetUrl) { data, _, error in
        guard let responseData = data, error == nil else {
            print("数据获取失败:\(error?.localizedDescription ?? "未知错误")")
            return
        }
        
        do {
            // 解析为你定义的结构体数组
            self.getData = try JSONDecoder().decode([JsonSosTalleres].self, from: responseData)
            // 回到主线程刷新表格
            DispatchQueue.main.async {
                self.tablaView.reloadData()
            }
        } catch {
            print("JSON解析错误:\(error.localizedDescription)")
        }
    }.resume()
}

这样修改后,就能正确从嵌套JSON结构中取出标题和内容,顺利赋值给TableView单元格的标签了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 03:56:30