У меня проблема с обновлением массива общих структур, которые в приведенном ниже примере равны [SelectableItem]
.
Быстрый 40-секундный видеоэкран с проблемой.
Итак, у меня есть UITableView
с источником данных [SelectableItem]
.В первый раз, когда я запускаю этот массив, где я указываю имя и выбранные состояния, табличное представление показывает данные правильно.Но когда я пытаюсь выбрать SelectableItem
и переключить isSelected
Bool состояние в true и перезагрузить данные, свойство source SelectableItem
isSelected
по-прежнему false
, когда ячейка пытается получить его через тот же getModelAt
func.
protocol Selectable {
var isSelected: Bool { get set }
}
struct SelectableItem: Selectable {
var isSelected: Bool
let name: String
}
func getModelAt(_ indexPath: IndexPath) -> T {
return isSearchActive ? searchResults[indexPath.item] : models[indexPath.item]
}
@objc(tableView:didSelectRowAtIndexPath:) func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath){
if var model = strongDataSource?.getModelAt(indexPath) {
model.isSelected = !model.isSelected
tableView.reloadData()
}
}
в этой строке model.isSelected = !model.isSelected
все идет хорошо, и я вижу название модели и как model.isSelected
переключился на другое значение (например, с ложного на истинное и с истинного на ложное).
Мое предположение, что, поскольку я использую структуры вместо классов, возможно, мой getModelAt
возвращает мне модель по значению из массива, а не по ссылке.Но я не уверен на 100%.Или, может быть, что-то не так с Protocol get set
Не уверен, будет ли полезно понять мой вопрос, но я использовал эту ссылку для реализации функции поиска, и я просто расширил ее с помощью функции выбора.Так что все работает хорошо, за исключением присвоения новых значений для isSelected
свойства экземпляра структуры.