下面是我的两个结构,我想在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
数组并找到具有相同Company
的company_id
。找到匹配项后,从匹配的公司获取company_name
。代码
companyData.first { $0.company_id == data.company_id }?.company_name
表示:遍历
companyData
数组,找到公司id等于data.company_id
的第一个条目。如果找到匹配项,则返回其company_name
。