SWIFT-如果 indexPatih 为 0,如何删除 Collection View Cell?

Posted

技术标签:

【中文标题】SWIFT-如果 indexPatih 为 0,如何删除 Collection View Cell?【英文标题】:SWIFT- How to delete Collection View Cell if indexPatih is 0? 【发布时间】:2021-10-04 14:21:58 【问题描述】:

我是 swift 新手,我需要有关删除 colleciton 视图单元格的帮助。在此代码中,如果 indexPath 为 0,则删除该单元格时出错。

 @IBAction func deleteItem(_ sender: Any) 
    
    if let selectedCells = tablesCollectionView.indexPathsForSelectedItems
        let items = selectedCells.map $0.item.sorted().reversed()
        

        for item in items 
            tables.remove(at: item)
            let tableNo: TableModel
            tableNo = tables[item-1]  //Thread 1: Fatal error: Index out of range
            
            refTables = Database.database().reference().child("userInfo").child(uid!).child("tables")
            refTables.child(tableNo.id!).removeValue  error,arg  in
               if error != nil 
                   print("error \(error)")
               
             
            
        
      
        tablesCollectionView.deleteItems(at: selectedCells)
        deleteButton.isEnabled = false
    
    

当我尝试删除索引路径为 0 的单元格时,我收到此消息“线程 1:致命错误:索引超出范围”。

【问题讨论】:

【参考方案1】:

这一行

tables.remove(at: item)

for 循环内很危险,因为当您从数组中删除时,它的大小更改会导致旧索引出错

你需要

var toDeleteIds = [String]()
for item in items 
  let tableNo = tables[item]  
  toDeleteIds.append(tableNo.id!)
  refTables =  Database.database().reference().child("userInfo").child(uid!).child("tables")
  refTables.child(tableNo.id!).removeValue  error,arg  in
    if error != nil 
      print("error \(error)")
    
   
 
tables.removeAll  toDeleteIds.contains($0.id) 

【讨论】:

我试试这个,但现在的错误是“无法转换'String类型的值?' toDeleteIds.append(tableNo.id) 和 tables.removeAll toDeleteIds.contains($0) 上的预期参数类型“Int” 好的尝试编辑.... 哦,现在这条 linelet tableNo = tables[item-1] "Thread 1: Fatal error: Index out of range" 为什么会有-1 可以去掉吗? 我忘了,现在正在工作。非常感谢! :)

以上是关于SWIFT-如果 indexPatih 为 0,如何删除 Collection View Cell?的主要内容,如果未能解决你的问题,请参考以下文章

Swift 3.0,Firebase:如何获取最后添加的记录

如何用swift写GCD

如何使用 Swift 将 Int of Array 值转换为 Double [关闭]

Swift2.0可选类型

Swift:尽管添加了元素,但 UIStackView 的高度始终为 0

Swift中文本字段的百分比掩码