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
我在更新通用结构数组时遇到问题,在下面的示例中是 [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