Swift。无法更改结构的 属性,接收到的表单数组

Swift. Can't change structure's property, received form array

我在更新通用结构数组时遇到问题,在下面的示例中是 [SelectableItem]

Quick 40 seconds video screencast with a problem.

所以我有一个 UITableView,数据源为 [SelectableItem]。第一次在我指定名称和 selected 状态的地方初始化这个数组时,table 视图正确显示数据。但是当我尝试 select SelectableItem 并将 isSelected Bool 状态切换为 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 returns 对我来说是一个按值从数组而不是按引用的模型。但我不是 100% 确定。或者 Protocol get set

有问题

不确定它是否有助于理解我的问题,但我使用此 link 来实现搜索功能,并且我只是使用 selection 功能对其进行了扩展。因此,除了为结构实例的 isSelected 属性 分配新值外,一切正常。

对于 struct 赋值意味着复制和更改它不会影响主要引用

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

所以你需要SelectableItem一个class