下面是我的两个结构,我想在UITableViewCell中打印两个结构的值

struct MainCell: Decodable
{
    let job_id: String
    let job_desig: String
    let job_desc: String
    let job_location: String
    let job_emp_gender: String
    let job_skills: String
    let company_id: Int

}
struct Company: Decodable{
    let company_id: Int
    let company_name: String
}

var mainCellData = [MainCell]()
var companyData = [Company]()

-TableView方法
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int
    {
        return mainCellData.count + companyData.count
    }

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell
    {
        let cell:JobDetails_TableViewCell = tableView.dequeueReusableCell(withIdentifier: "jobCell") as! JobDetails_TableViewCell

        for jobs in mainCellData {
            cell.lblDesig.text = jobs.job_desig
            cell.lblDesc.text = jobs.job_desc
            cell.lblLocation.text = jobs.job_location
            cell.comName.text = jobs.name.company_name
        }

        return cell
    }

因为我想从我的第一个结构(struct MainCell:Decodable)打印作业设计、作业描述和作业位置,从我的第二个结构(struct company:Decodable)打印公司名称
有谁能帮我解决这个问题吗?

最佳答案

你的numberOfRowsInSection不符合你的要求。
去掉for中的cellForRowAt循环。
你不需要合并任何东西。你需要根据公司的id查找公司名称。
您的代码应该如下所示:

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

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    let cell:JobDetails_TableViewCell = tableView.dequeueReusableCell(withIdentifier: "jobCell") as! JobDetails_TableViewCell

    let data = mainCellData[indexPath.row]
    cell.lblDesig.text = data.job_desig
    cell.lblDesc.text = data.job_desc
    cell.lblLocation.text = data.job_location
    cell.comName.text = companyData.first { $0.company_id == data.company_id }?.company_name

    return cell
}

真正的诀窍是得到公司的名字。其思想是您有data.company_id这当然是所显示行的公司id。您需要遍历companyData数组并找到具有相同Companycompany_id。找到匹配项后,从匹配的公司获取company_name
代码companyData.first { $0.company_id == data.company_id }?.company_name表示:
遍历companyData数组,找到公司id等于data.company_id的第一个条目。如果找到匹配项,则返回其company_name

10-08 07:46