我想从多个 tableView 选择中创建一个数组

I want to create an array from multiple tableView selection

//this gives me an array for multiple rows selected in a tableView.

let rowsSelected = self.tableView.indexPathsForSelectedRows!.map{[=10=].row}

打印语句为我提供了这样的结果,用于选择第 2 行和第 5 行......[2.5]。

我现在想从当前列表中删除这两行。我正在努力寻找创建简化数组的正确概念。字典或使用 NSIndexPath?

假设您的数据源数组的名称是 tableData,您可以使用这些行。

数据源数组和table视图中的项目必须同时删除,sortforEach函数用于删除从最高索引开始的项目.

if let selectedIndexPaths = self.tableView.indexPathsForSelectedRows {
   let indexes = selectedIndexPaths.map{[=10=].row}.sort(>) // sort descending
   indexes.forEach{tableData.removeAtIndex([=10=])}
   tableView.deleteRowsAtIndexPaths(selectedIndexPaths, withRowAnimation:.Fade)
}

@vadian 的答案很接近,但很危险;请参阅我对他的回答的评论。

要修复它,您必须先反转 要删除的索引数组。要了解原因,运行 游乐场中的以下几行:

let indicesToDelete = [4, 8]
var array = ["a", "b", "c", "d", "e", "f", "g", "h", "i"]
let goodReducedArray = indicesToDelete.reverse().map { array.removeAtIndex([=10=]) }
goodReducedArray  // prints ["i","e"]
let badReducedArray = indicesToDelete.map { array.removeAtIndex([=10=]) }
badReducedArray   // barfs EXC_BAD_INSTRUCTION

所以@vadian 代码的更正版本将是:

if let selectedIndexPaths = self.tableView.indexPathsForSelectedRows {
   selectedIndexPaths.reverse().map{tableData.removeAtIndex([=11=].row)}
   tableView.deleteRowsAtIndexPaths(selectedIndexPaths, withRowAnimation:.Fade)
}