Как я могу объединить две структуры и вывести значения обоих в uitableviewcell в Swift 3.0 - PullRequest
0 голосов
/ 15 мая 2018

Ниже приведены мои две структуры, и я хочу напечатать значения из обеих структур в 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
    }

Поскольку я хочу напечатать job_desig, job_desc и job_location из моей первой структуры (struct MainCell: Decodable) и company_name из моей второй структуры (struct Company: Decodable)

Может ли кто-нибудь помочь мне с моей проблемой?

Ответы [ 2 ]

0 голосов
/ 15 мая 2018

Вам не нужно добавлять счетчик для numberOfRow, Не рекомендуется управлять двумя массивами для таблиц, которые следует объединять в одну структуру, как показано ниже
Вы можете создать одну структуру для поддержки всего вашего источника данных

struct MainStruct {

    var mainCellData :MainCell
    var companyData :Company?

}

EDIT

и заполните свой источник данных, как это в viewDidLoad или всякий раз, когда вы получили свой массив

var data = [MainStruct]()
for object in mainCellData {
   let obj = companyData.first{$0.company_id == object.company_id }
    data.append(MainStruct(mainCellData: object, companyData: obj))
}

Теперь

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

и

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

    let data = data[indexPath.row]
    cell.lblDesig.text = data.mainCellData.job_desig
    cell.lblDesc.text = data.mainCellData.job_desc
    cell.lblLocation.text = data.mainCellData.job_location
    cell.comName.text = data.companyData?.company_name

    return cell
}

Надеюсь, это полезно

0 голосов
/ 15 мая 2018
  1. Ваш numberOfRowsInSection не соответствует вашим требованиям.
  2. Избавьтесь от цикла for в cellForRowAt.
  3. Вам не нужно ничего объединять,Вам нужно найти название компании на основе ее идентификатора.

Ваш код должен выглядеть следующим образом:

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, что, конечно, company_id для отображаемой строки.Вам нужно перебрать массив companyData и найти Company с тем же company_id.Когда совпадение найдено, получите company_name от соответствующей компании.

Код companyData.first { $0.company_id == data.company_id }?.company_name означает:

Выполните итерацию по массиву companyData и найдите первую запись, где company_idравняется data.company_id.Если совпадение найдено, верните его company_name.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...