//this gives me an array for multiple rows selected in a tableView.
let rowsSelected = self.tableView.indexPathsForSelectedRows!.map{$0.row}
print语句给出了这样的结果,用于选择第2行和第5行..... [2.5]。
我现在想删除当前列表中的两行。我正在努力寻找创建简化数组的正确概念。字典或使用NSIndexPath?
答案 0 :(得分:1)
@ vadian的答案很接近,但这很危险;看到我对他回答的评论。
要修复它,您必须先反转要删除的索引数组。要了解原因,请在操场上运行以下行:
let indicesToDelete = [4, 8]
var array = ["a", "b", "c", "d", "e", "f", "g", "h", "i"]
let goodReducedArray = indicesToDelete.reverse().map { array.removeAtIndex($0) }
goodReducedArray // prints ["i","e"]
let badReducedArray = indicesToDelete.map { array.removeAtIndex($0) }
badReducedArray // barfs EXC_BAD_INSTRUCTION
所以@ vadian代码的更正版本将是:
if let selectedIndexPaths = self.tableView.indexPathsForSelectedRows {
selectedIndexPaths.reverse().map{tableData.removeAtIndex($0.row)}
tableView.deleteRowsAtIndexPaths(selectedIndexPaths, withRowAnimation:.Fade)
}
答案 1 :(得分:0)
假设您的数据源数组的名称为tableData
,则可以使用这些行。
必须同时删除数据源数组和表视图中的项目,sort
和forEach
函数用于删除从最高索引开始的项目。
if let selectedIndexPaths = self.tableView.indexPathsForSelectedRows {
let indexes = selectedIndexPaths.map{$0.row}.sort(>) // sort descending
indexes.forEach{tableData.removeAtIndex($0)}
tableView.deleteRowsAtIndexPaths(selectedIndexPaths, withRowAnimation:.Fade)
}