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

Swift 3.0中如何合并两个结构体并在UITableViewCell中显示其值

解决UITableView显示两个关联结构体数据的问题

首先,咱们先梳理下你现有代码里的几个核心问题:

  1. 行数计算逻辑错误:你把mainCellData和companyData的数量相加,这会导致行数混乱——实际上每个职位(MainCell)对应一行,行数应该等于mainCellData.count。
  2. Cell赋值逻辑错误:你在cellForRowAt里用for循环遍历所有职位,最后Cell会被最后一个职位的数据覆盖,完全没有对应到当前行的内容。
  3. 公司名称关联错误:MainCell里只有company_id,没有name属性,你需要通过这个ID去companyData数组里匹配对应的公司信息。

修正方案(基础版)

先修改TableView的核心方法:

// 修正行数:每个职位对应一行
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    return mainCellData.count
}

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    // 推荐用带indexPath的dequeue方法,更安全
    let cell = tableView.dequeueReusableCell(withIdentifier: "jobCell", for: indexPath) as! JobDetails_TableViewCell
    
    // 获取当前行对应的职位数据
    let currentJob = mainCellData[indexPath.row]
    
    // 赋值职位的基本信息
    cell.lblDesig.text = currentJob.job_desig
    cell.lblDesc.text = currentJob.job_desc
    cell.lblLocation.text = currentJob.job_location
    
    // 根据company_id查找对应的公司
    if let matchedCompany = companyData.first(where: { $0.company_id == currentJob.company_id }) {
        cell.comName.text = matchedCompany.company_name
    } else {
        // 找不到对应公司时显示默认文本
        cell.comName.text = "未知公司"
    }
    
    return cell
}

优化方案(性能提升版)

如果你的companyData数据量较大,每次在cellForRowAt里查找公司会影响性能,建议提前把职位和对应的公司关联成一个组合结构体:

// 创建组合结构体,把职位和公司信息绑定
struct JobWithCompany {
    let job: MainCell
    let company: Company?
}

// 声明组合数据数组
var jobWithCompanyData: [JobWithCompany] = []

在你获取到mainCellData和companyData之后,初始化这个组合数组:

// 假设你在网络请求完成后拿到了两个数组,执行以下代码
jobWithCompanyData = mainCellData.map { job in
    // 匹配对应公司
    let company = companyData.first(where: { $0.company_id == job.company_id })
    return JobWithCompany(job: job, company: company)
}

然后修改TableView方法使用这个组合数组:

func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    return jobWithCompanyData.count
}

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    let cell = tableView.dequeueReusableCell(withIdentifier: "jobCell", for: indexPath) as! JobDetails_TableViewCell
    
    let currentItem = jobWithCompanyData[indexPath.row]
    cell.lblDesig.text = currentItem.job.job_desig
    cell.lblDesc.text = currentItem.job.job_desc
    cell.lblLocation.text = currentItem.job.job_location
    cell.comName.text = currentItem.company?.company_name ?? "未知公司"
    
    return cell
}

这样就可以高效地在每个Cell里显示职位信息和对应的公司名称啦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 09:52:35