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

时间:2016-02-26 05:00:44

标签: arrays swift uitableview dictionary nsindexpath

//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?

2 个答案:

答案 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,则可以使用这些行。

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

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)
}