迅速。无法更改结构的属性,收到表格数组

时间:2019-05-10 21:13:03

标签: ios swift struct swift-protocols

在更新以下示例中的通用结构数组[SelectableItem]时遇到问题。

Quick 40 seconds video screencast with a problem.

所以我有一个UITableView,数据源为[SelectableItem]。第一次初始化此数组时,我在其中指定名称和所选状态时,表视图正确显示了数据。但是,当我尝试选择SelectableItem并将isSelected的布尔状态切换为true并重新加载数据时,当单元格尝试时,源SelectableItem isSelected属性仍然是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通过数组中的值而不是引用中的值返回给我一个模型。但我不确定100%。也许Protocol get set

出了问题

不确定了解我的问题是否有帮助,但是我使用此link来实现搜索功能,而我只是通过选择功能对其进行了扩展。因此,除了为结构实例的isSelected属性分配新值之外,所有其他方法都工作正常。

1 个答案:

答案 0 :(得分:1)

对于struct分配意味着复制和更改它不会影响主要参考

if var model = strongDataSource?.getModelAt(indexPath) {

因此您需要将SelectableItem设为班级