在下面的示例中,我更新[SelectableItem]的泛型结构数组时遇到问题。
Quick 40 seconds video screencast with a problem.
所以我有一个数据源为UITableView[SelectableItem]。当我第一次在指定名称和选定状态的数组中初始化时,表视图会正确地显示数据。但当我尝试选择SelectableItem并将isSelectedBool状态切换为true并重新加载数据时,当cell尝试通过相同的SelectableItem函数获取数据时,sourceisSelectedfalse属性仍然是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/

10-10 13:38