Не используйте отдельный массив для хранения путей индекса. Это очень плохая практика.
Клетки используются повторно. Вы должны убедиться, что каждый элемент пользовательского интерфейса установлен в определенное состояние в cellForRow
.
В вашей модели данных предпочтительно, чтобы структура или класс добавляли свойство
var isSelected = false
В cellForRow
установите флажок в соответствии со свойством
let item = datasource[indexPath.row]
cell.accessoryType = item.isSelected ? .checkmark : .none
В didSelectRowAt
переключите isSelected
и перезагрузите строку
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
datasource[indexPath.row].isSelected.toggle()
tableView.reloadRows(at: [indexPath], with: .none)
}