Ios 如何在Swift中仅从数组中删除选定的索引路径?

Ios 如何在Swift中仅从数组中删除选定的索引路径?,ios,arrays,Ios,Arrays,我有一个可变数组: var responseArray = ["yes", "no", "no way", "of course", "for sure", "not a chance", "positively"] responseArray是“我的表”视图的数据源,允许在编辑过程中进行多项选择 我正在捕获选定的索引路径: let paths = tableView.indexPathsForSelectedRows() 通过运行println(路径),我可以返回并验证我的tableVie

我有一个可变数组:

var responseArray = ["yes", "no", "no way", "of course", "for sure", "not a chance", "positively"]
responseArray
是“我的表”视图的数据源,允许在编辑过程中进行多项选择

我正在捕获选定的索引路径:

let paths = tableView.indexPathsForSelectedRows()
通过运行
println(路径)
,我可以返回并验证我的
tableView
的每个选定
indepath

我已经阅读了
indexPathsForSelectedRows
方法的文档,并理解它返回一个按行排序的索引路径数组

我无法理解的是如何使用返回的索引路径数组从表视图中选择删除的每一行的
responseArray
中删除数据

在阅读了一些文件之后,我是否正确地认为我无法从“responseArray”中删除任何数据,因为我正在列举它?例如:

@IBAction func deleteButtonPressed(sender: AnyObject) {
    if responseArray.count > 0 {
        if let paths = self.tableView.indexPathsForSelectedRows() {
            var sortedArray = paths.sorted({$0.row < $1.row})
            // Remove index paths from responseArray
            for i in sortedArray {
                responseArray.removeAtIndex(i.row)
            }
            self.tableView.reloadData()
        }
    }
}
@IBAction func deleteButtonPressed(发件人:AnyObject){
如果responseArray.count>0{
如果let path=self.tableView.indexPathsForSelectedRows(){
var sortedArray=path.sorted({$0.row<$1.row})
//从responseArray中删除索引路径
因为我在Darray{
responseArray.removeAtIndex(i.row)
}
self.tableView.reloadData()
}
}
}
我可以一行一行地从表视图中删除每一行,但当我选择第一行和最后一行、所有行或任何其他行组合进行删除时,我会出现
致命错误:数组索引超出范围
。但是,如果选择两个相邻的行进行删除,则会获得所需的结果,并从表视图中删除这两行


我知道我遗漏了一些东西,但作为一名新程序员,我已经三天没有解决这个问题了。我做得不对的是什么?

这是您的数组:[A、B、C、D]

假设您希望分别删除索引0和3处的A和D,一次删除一个:

deleteAtinex(0)给出:[B,C,D]

deleteAtinex(3)给出:越界异常

编辑:
好的,为了避免使事情复杂化,为什么不先通过反转排序来删除最高的索引:
{$1.row<$0.row}
这是您的数组:[A,B,C,D]

假设您希望分别删除索引0和3处的A和D,一次删除一个:

deleteAtinex(0)给出:[B,C,D]

deleteAtinex(3)给出:越界异常

编辑:
好的,为了避免使事情复杂化,为什么不先通过反转排序来删除最高的索引:
{$1.row<$0.row}
这是您的数组:[A,B,C,D]

假设您希望分别删除索引0和3处的A和D,一次删除一个:

deleteAtinex(0)给出:[B,C,D]

deleteAtinex(3)给出:越界异常

编辑:
好的,为了避免使事情复杂化,为什么不先通过反转排序来删除最高的索引:
{$1.row<$0.row}
这是您的数组:[A,B,C,D]

假设您希望分别删除索引0和3处的A和D,一次删除一个:

deleteAtinex(0)给出:[B,C,D]

deleteAtinex(3)给出:越界异常

编辑:
好的,为了避免使事情复杂化,为什么不总是先通过反转排序来删除最高的索引:
{$1.row<$0.row}

由于路径数组已排序,您知道每次从数组中删除元素时,较高的索引现在都会比原来少一个。您可以简单地保留一个递增的偏移量以应用于删除-

@IBAction func deleteButtonPressed(sender: AnyObject) {
    if responseArray.count > 0 {
        if let paths = self.tableView.indexPathsForSelectedRows() {

            var sortedArray = paths.sorted({$0.row < $1.row})
            var offset=0;
            // Remove index paths from responseArray
            for i in sortedArray {
                responseArray.removeAtIndex(i.row-offset)
                offset++
            }
            self.tableView.reloadData()
        }
    }
}
@IBAction func deleteButtonPressed(发件人:AnyObject){
如果responseArray.count>0{
如果let path=self.tableView.indexPathsForSelectedRows(){
var sortedArray=path.sorted({$0.row<$1.row})
var偏移=0;
//从responseArray中删除索引路径
因为我在Darray{
responseArray.removeAtIndex(即行偏移)
抵消++
}
self.tableView.reloadData()
}
}
}

由于路径数组已排序,您知道每次从数组中删除一个元素时,较高的索引现在将比以前少一个。您可以简单地保留一个递增的偏移量以应用于删除-

@IBAction func deleteButtonPressed(sender: AnyObject) {
    if responseArray.count > 0 {
        if let paths = self.tableView.indexPathsForSelectedRows() {

            var sortedArray = paths.sorted({$0.row < $1.row})
            var offset=0;
            // Remove index paths from responseArray
            for i in sortedArray {
                responseArray.removeAtIndex(i.row-offset)
                offset++
            }
            self.tableView.reloadData()
        }
    }
}
@IBAction func deleteButtonPressed(发件人:AnyObject){
如果responseArray.count>0{
如果let path=self.tableView.indexPathsForSelectedRows(){
var sortedArray=path.sorted({$0.row<$1.row})
var偏移=0;
//从responseArray中删除索引路径
因为我在Darray{
responseArray.removeAtIndex(即行偏移)
抵消++
}
self.tableView.reloadData()
}
}
}

由于路径数组已排序,您知道每次从数组中删除一个元素时,较高的索引现在将比以前少一个。您可以简单地保留一个递增的偏移量以应用于删除-

@IBAction func deleteButtonPressed(sender: AnyObject) {
    if responseArray.count > 0 {
        if let paths = self.tableView.indexPathsForSelectedRows() {

            var sortedArray = paths.sorted({$0.row < $1.row})
            var offset=0;
            // Remove index paths from responseArray
            for i in sortedArray {
                responseArray.removeAtIndex(i.row-offset)
                offset++
            }
            self.tableView.reloadData()
        }
    }
}
@IBAction func deleteButtonPressed(发件人:AnyObject){
如果responseArray.count>0{
如果let path=self.tableView.indexPathsForSelectedRows(){
var sortedArray=path.sorted({$0.row<$1.row})
var偏移=0;
//从responseArray中删除索引路径
因为我在Darray{
responseArray.removeAtIndex(即行偏移)
抵消++
}
self.tableView.reloadData()
}
}
}

由于路径数组已排序,您知道每次从数组中删除一个元素时,较高的索引现在将比以前少一个。您可以简单地保留一个递增的偏移量以应用于删除-

@IBAction func deleteButtonPressed(sender: AnyObject) {
    if responseArray.count > 0 {
        if let paths = self.tableView.indexPathsForSelectedRows() {

            var sortedArray = paths.sorted({$0.row < $1.row})
            var offset=0;
            // Remove index paths from responseArray
            for i in sortedArray {
                responseArray.removeAtIndex(i.row-offset)
                offset++
            }
            self.tableView.reloadData()
        }
    }
}
@IBAction func deleteButtonPressed(发件人:AnyObject){
如果responseArray.count>0{