需要建议从字典中删除数据
Need suggestion removing data from dictionary
我有一个结构如下的字典:
[0:["var1":"var1Value","var2":"var2Value", 1:["var1":"var1Value","var2":"var2Value", 2:["var1":"var1Value","var2":"var2Value"]
我正在使用它在 TableView 中显示:
cell.title.text = dict[indexPath.row]?["var1"]
上面的代码工作正常,但是当我使用 .delete 编辑风格在 TableView 中滑动删除,并删除中间值时,它弄乱了我的 TableView 因为字典现在有 0: 和 2: 因为我们删除了 1: 所以现在 cellForRowAt 正在寻找 0: 和 1: 当字典实际上是 0: 2:
滑动删除代码:
dict.remove(at: indexPath.row)
结果字典:
[0:["var1":"var1Value","var2":"var2Value", 2:["var1":"var1Value","var2":"var2Value"]
return 中的哪些内容无法正确显示 tableView 单元格。
下面的代码似乎有效。这会奏效还是可能在将来引起问题?
func deleteFromArray(at:Int){
var count = at
while dict[count] != nil {
dict[count] = dict[count+1]
count += 1
}
ItemsTableView.reloadData()
}
感谢大家的帮助
字典不适用于 table 视图或集合视图的模型。按照 Larme 的建议使用数组。
您说需要单独的数组,但目前您的模型中没有 any 数组。现在你拥有的是字典中的字典。
您可以创建一个结构来表示 table 视图中的一个单元格,并让模型成为这些结构的数组。
编辑:
可能看起来像这样:
struct CellModel {
let title: String
let iconName: String
let description: String
}
var tableViewModel: [CellModel] = [
CellModel(title: "A Thing",
iconName: "AnImageOfThing",
description: "This is a thing to go in the table view"),
CellModel(title: "Another Thing",
iconName: "AnImageOfAnotherThing",
description: "This is another thing to go in the table view"),
CellModel(title: "Yet Another Thing",
iconName: "AnImageOfYetAnotherThing",
description: "This is yet another thing to go in the table view")
]
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
guard let cell: MyCell = tableview.dequeueReusableCell(withIdentifier: cellID, for: indexPath) as? MyCell else {
fatalError("Unable to dequeue cell")
}
let cellData = tableViewModel[indexPath.row]
cell.title = cellData.title
cell.imageView.image = UIImage(named: cellData.iconName)
cell.descriptionField.text = cellData.description
return cell
}
我有一个结构如下的字典:
[0:["var1":"var1Value","var2":"var2Value", 1:["var1":"var1Value","var2":"var2Value", 2:["var1":"var1Value","var2":"var2Value"]
我正在使用它在 TableView 中显示:
cell.title.text = dict[indexPath.row]?["var1"]
上面的代码工作正常,但是当我使用 .delete 编辑风格在 TableView 中滑动删除,并删除中间值时,它弄乱了我的 TableView 因为字典现在有 0: 和 2: 因为我们删除了 1: 所以现在 cellForRowAt 正在寻找 0: 和 1: 当字典实际上是 0: 2:
滑动删除代码:
dict.remove(at: indexPath.row)
结果字典:
[0:["var1":"var1Value","var2":"var2Value", 2:["var1":"var1Value","var2":"var2Value"]
return 中的哪些内容无法正确显示 tableView 单元格。
下面的代码似乎有效。这会奏效还是可能在将来引起问题?
func deleteFromArray(at:Int){
var count = at
while dict[count] != nil {
dict[count] = dict[count+1]
count += 1
}
ItemsTableView.reloadData()
}
感谢大家的帮助
字典不适用于 table 视图或集合视图的模型。按照 Larme 的建议使用数组。
您说需要单独的数组,但目前您的模型中没有 any 数组。现在你拥有的是字典中的字典。
您可以创建一个结构来表示 table 视图中的一个单元格,并让模型成为这些结构的数组。
编辑:
可能看起来像这样:
struct CellModel {
let title: String
let iconName: String
let description: String
}
var tableViewModel: [CellModel] = [
CellModel(title: "A Thing",
iconName: "AnImageOfThing",
description: "This is a thing to go in the table view"),
CellModel(title: "Another Thing",
iconName: "AnImageOfAnotherThing",
description: "This is another thing to go in the table view"),
CellModel(title: "Yet Another Thing",
iconName: "AnImageOfYetAnotherThing",
description: "This is yet another thing to go in the table view")
]
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
guard let cell: MyCell = tableview.dequeueReusableCell(withIdentifier: cellID, for: indexPath) as? MyCell else {
fatalError("Unable to dequeue cell")
}
let cellData = tableViewModel[indexPath.row]
cell.title = cellData.title
cell.imageView.image = UIImage(named: cellData.iconName)
cell.descriptionField.text = cellData.description
return cell
}