Определение экземпляров ячейки внутри операторов If - Swift - PullRequest
1 голос
/ 22 марта 2020

Я хочу иметь возможность изменить определение своей ячейки для считывания различных пользовательских классов ячейки. Я пытался сослаться на этот пост и читать чат, но безрезультатно. Вот мой код для определения переменной ячейки

guard let cell = tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath) as? DiscussionTableViewCell else {fatalError("Unable to create cell")}

Я также сослался на этот пост , чтобы потенциально иметь переменную, равную классу, который изменяется с использованием этого кода

let customCell = DiscussionTableViewCell.self
guard let cell = tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath) as? customCell else {fatalError("Unable to create cell")}

Однако я получаю ошибку 'Использование необъявленного типа' customCell ''. Я не возражаю, если решение изменяет переменную для ссылки на правильный класс или просто имеет изменение внутри оператора if, но никакие решения не пытались действительно работать. Было бы неплохо, если бы я мог просто сделать что-то вроде этого:

    if (singlePageVar == 2) {
        guard let cell = tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath) as? DiscussionTableViewCell else {fatalError("Unable to create cell")}
        cell.discussionTitleLabel.text = discussionTitles[indexPath.row]
        cell.discussionDescriptionLabel.text = discussionDescriptions[indexPath.row]
    }
    if (singlePageVar == 25) {
        guard let cell = tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath) as? DiscussionTableViewCell else {fatalError("Unable to create cell")}
        //assign different things here
    }
    return cell

, но независимо от того, как я определяю ячейку над этим кодом, например, let cell: UITableViewCell, а затем изменяю ее в операторе if, всегда есть та же ошибка.

Ответы [ 2 ]

1 голос
/ 22 марта 2020

Если у вас тот же пользовательский тип ячейки, но другое содержимое, создайте ячейку перед первым оператором if.

и принудительно уменьшите ячейку, это будет иметь тот же эффект, что и синтаксис guard / fatalError.

let cell = tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath) as! DiscussionTableViewCell

if singlePageVar == 2 {
    cell.discussionTitleLabel.text = discussionTitles[indexPath.row]
    cell.discussionDescriptionLabel.text = discussionDescriptions[indexPath.row]
}
else if singlePageVar == 25 {
    //assign different things here
}
return cell

Однако, если у вас разные типы ячеек, вы должны создать и вернуть ячейки отдельно

if (singlePageVar == 2) {
    let cell = tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath) as! DiscussionTableViewCell        cell.discussionTitleLabel.text = discussionTitles[indexPath.row]
    cell.discussionDescriptionLabel.text = discussionDescriptions[indexPath.row]
    return cell
}
else if (singlePageVar == 25) {
    let cell = tableView.dequeueReusableCell(withIdentifier: "otherCell", for: indexPath) as! OtherTableViewCellelse
    //assign different things here
    return cell
}
return UITableViewCell()

И еще раз:

Вы настоятельно не рекомендуется использовать несколько массивов в качестве источника данных.

0 голосов
/ 22 марта 2020

Вы можете использовать так:

let cell = tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath) as? DiscussionTableViewCell  
if (singlePageVar == 2) {
        cell.discussionTitleLabel.text = discussionTitles[indexPath.row]
        cell.discussionDescriptionLabel.text = discussionDescriptions[indexPath.row]
    }
    if (singlePageVar == 25) {
        //assign different things here
    }
    return cell
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...