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 将 Int of Array 值转换为 Double [关闭]