在下面的示例中,我更新[SelectableItem]
的泛型结构数组时遇到问题。
Quick 40 seconds video screencast with a problem.
所以我有一个数据源为UITableView
的[SelectableItem]
。当我第一次在指定名称和选定状态的数组中初始化时,表视图会正确地显示数据。但当我尝试选择SelectableItem
并将isSelected
Bool状态切换为true并重新加载数据时,当cell尝试通过相同的SelectableItem
函数获取数据时,sourceisSelected
false
属性仍然是getModelAt
。
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
如何切换到另一个值(例如从false到true,从true到false)。我的假设是,当我使用结构而不是类时,我的
getModelAt
可能会从数组(而不是通过引用)返回一个按值的模型。但我不是百分之百确定。或者Protocol get set
不确定是否有助于理解我的问题,但我使用这个link来实现搜索功能,我只是扩展了它的选择功能。因此,除了为结构实例的
isSelected
属性分配新值之外,所有这些都可以正常工作。 最佳答案
对于astruct
赋值意味着复制和更改它不会影响主引用
if var model = strongDataSource?.getModelAt(indexPath) {
所以你需要把
SelectableItem
变成一个类关于ios - swift 。无法更改结构的属性,收到表格数组,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/56084896/