У меня есть tableViewCell, который мне нужно, чтобы массив передавался в tableViewCell, а не просто передавался в текстовую метку или что-то в этом роде. Я покажу свой код.
Мой TableViewController:
let subjectsDict = ["Spanish": ["Lesson 1", "Lesson 2"], "Math":["Problem set 1", "Problem set 2"], "Science": ["Lab"]]
let subjectArray = ["Spanish", "Math", "Science"]
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
guard let cell = tableView.dequeueReusableCell(withIdentifier: "subjectCell", for: indexPath) as? SubjectTableViewCell else {
return UITableViewCell()
}
cell.subjectList = subjectsDict[subjectArray[indexPath.row]]
return cell
}
И мой tableViewCell выглядит так.
class subjectTableViewCell: UITableViewCell {
var subjectList: [String] = []
override init(style: UITableViewCellStyle, reuseIdentifier: String?) {
super.init(style: style , reuseIdentifier: reuseIdentifier)
setUpTable()
}
required init?(coder decoder: NSCoder) {
super.init(coder: decoder)
}
override func awakeFromNib() {
super.awakeFromNib()
setUpTable()
}
func setUpTable() {
print(subjectList)
}
//other code for creating the cell
}
Но когда я печатаю subjectList из subjectTableViewCell, он печатает none
Вам нужно показать, как вы пытаетесь обновить содержимое ячейки значением subjectList.
Я сделал сейчас! Извините, я не добавил это изначально
Это нормально, что subjectList пуст, потому что setUpTable вызывается при инициализации или загрузке ячейки, то есть до установки subjectList.
Хорошо, я это запомню. Но я вижу, что он не устанавливается, потому что я использую его для создания списка в ячейке и не нахожу в массиве ничего, что можно было бы использовать для создания списка.





Если вы просто хотите вызвать setUpTable(), когда ваш subjectList в ячейке обновляется, попробуйте использовать:
var subjectList: [String] = [] {
didSet {
setUpTable()
}
}
Ваш код не пытается обновить содержимое ячейки значением subjectList. Все, что вы показываете, это print.
Также обратите внимание, что ваш print вызывается перед любой попыткой установить subjectList. И помните, что клетки используются повторно. setUpTable будет вызываться только один раз, но subjectList будет устанавливаться снова и снова по мере использования ячейки.
Самое простое решение - обновить ячейку при установленном subjectList.
var subjectList: [String] = [] {
didSet {
textLabel?.text = subjectList.joined(separator: ", ")
}
}
Я предполагаю, что вы используете стандартное свойство textLabel. Если у вас есть собственный лейбл, обновите его соответствующим образом.
Вы пытаетесь напечатать subjectList в момент инициализации ячейки табличного представления, поэтому в этот момент вы еще не установили subjectList. Если вы хотите распечатать список тем, вы можете сделать это после того, как зададите его.
После выполнения этой строки:
cell.subjectList = subjectsDict[subjectArray[indexPath.row]]
Почтовый индекс, по которому вы пытаетесь напечатать список тем