需要建议从字典中删除数据

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
}