Передача данных в пользовательский класс UITableViewCell

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

// TableView intialisation

            tableView = UITableView() // delcared in class level
            tableView.frame = self.view.bounds
            tableView.delegate = self
            tableView.dataSource = self
            tableView.separatorColor = .clear
            self.view.addSubview(tableView)
            tableView.register(TodoListTVCell.self, forCellReuseIdentifier: "cell")
            self.view.bringSubviewToFront(tableView)
    
    
 //  Cell for row at indexpath 

        func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
            
            let cell = tableView.dequeueReusableCell(withIdentifier: "cell") as! TodoListTVCell
    
            cell.picsTag = objectsArray[indexpath.row].picsTag   
            
            return cell
    
    }
    
    
// custom tableview cell
    class TodoListTVCell : UITableViewCell{
        
        var picsTag : Int!
        
        override init(style: UITableViewCell.CellStyle, reuseIdentifier: String?) {
            super.init(style: style, reuseIdentifier: reuseIdentifier)
            self.selectionStyle = .none
            
            print("index tag \(picsTag)")
    
        }
        
        required init?(coder: NSCoder) {
            fatalError("init(coder:) has not been implemented")
        }
    
    }

PS: я не хочу использовать глобальные переменные, заранее спасибо.

Это init место, где вы видите nil? Если это так, этого следует ожидать, поскольку инициализатор завершится до того, как вы присвоите что-либо свойству.

Paulw11 23.12.2020 09:31

Да, в этом проблема @paulw11

Code cracker 23.12.2020 09:32

функция init вызывается до того, как вы установите picsTag.

Blind Ninja 23.12.2020 09:34

picsTag не может быть ненулевым в init, но это действительно не должно иметь значения.

Paulw11 23.12.2020 09:35

Да, но какое решение?

Code cracker 23.12.2020 09:36

Ваш код абсолютно прекрасен, но не совсем понятно, чего вы пытаетесь достичь. Вы правильно устанавливаете значение, но получаете к нему доступ не в том месте.

Blind Ninja 23.12.2020 09:39
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
6
410
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Создайте пользовательскую функцию и вызовите эту функцию после установки всех свойств ячейки.

//  Cell for row at indexpath 

    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
            
        let cell = tableView.dequeueReusableCell(withIdentifier: "cell") as! TodoListTVCell
    
        cell.picsTag = objectsArray[indexpath.row].picsTag   
        cell.printPicsTag()
            
        return cell
    
    }


// custom tableview cell
   class TodoListTVCell : UITableViewCell{
    
    var picsTag : Int!
    
    override init(style: UITableViewCell.CellStyle, reuseIdentifier: String?) {
        super.init(style: style, reuseIdentifier: reuseIdentifier)
        self.selectionStyle = .none
    }
    
    required init?(coder: NSCoder) {
        fatalError("init(coder:) has not been implemented")
    }

    func printPicsTag() {
        print("index tag \(picsTag)")
    }
 
 }

Другие вопросы по теме