Вы не хотите передавать модель методу init
.Клетки снова и снова используются для разных рядов.Вам необходимо установить модель в cellForRowAt
после создания ячейки.
Вместо вашего init
, добавьте метод applyModel
(или похожее имя):
class ExampleCell {
var anInternalView: ExampleView
var anotherInternalView: ExampleView
apply(viewModel: ExampleViewModel) {
anInternalView = ExampleView(viewModel: viewModel)
anotherInternalView = ExampleView(viewModel: viewModel)
...
}
...
}
Тогда в вашем cellForRowAt
:
let cell = tableView.dequeueReusableCell(withIdentifier: "Some ID", for: indexPath) as! ExampleCell
cell.apply(viewModel: someModelForIndexPath)
Ключевым моментом, который следует помнить, является то, что init
будет вызываться только небольшое количество раз.Если, например, ваше табличное представление может отображать только 6 ячеек в любой момент времени на экране, то будут созданы только шесть (может быть, семь) ячеек, даже если в табличном представлении есть тысячи строк.Так что init
будет вызываться только 6 (или 7) раз, тогда как cellForRowAt
(и apply
) может вызываться много тысяч раз, когда пользователь прокручивает все строки назад и вперед.