无法使用Swift语法过滤器

时间:2016-01-26 09:29:04

标签: ios arrays swift uitableview nsindexpath

我有一个空数组:

devise_for :users, class_name: 'BackOffice::User'

我有一个tableView,在多个部分有多行。 当在UITableView中按下一个单元格时,它会将NSIndexPath添加到数组中,如下所示:

var indexPathArray: [[NSIndexPath]] = [[]]

如果选择了第1部分第一行的单元格,则先前的方法会将NSIndexPath添加到indexPathArray中的第一个数组。结果如下:

func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
        indexPathArray[indexPath.section].append(indexPath)
    }

当我取消选择单元格时,我想过滤掉我选择的内容。我实施了以下内容:

[ [indexPath], [],[] ]

在indexPathArray的每个数组中,如果取消选择相同的indexPath项,我基本上会尝试取出。例如,如果我双击两次单元格,将添加indexPath项目,并将通过过滤器函数删除。

然而,它在过滤器函数上抛出了一个错误:

func tableView(tableView: UITableView, didDeselectRowAtIndexPath indexPath: NSIndexPath) {
    indexPathArray = indexPathArray[indexPath.section].filter({ $0 != indexPath   })
}

我在这里做错了什么?

2 个答案:

答案 0 :(得分:2)

Rob 的帖子确实回答了你的问题。

另请注意,如果您只是需要跟踪所选索引,那么使用Set比使用array of array of IndexPath要容易得多。

var set = Set<NSIndexPath>()

添加IndexPath

set.insert(indexPath)

检查IndexPath是否在Set

set.contains(indexPath)

删除IndexPath

set.remove(indexPath)

答案 1 :(得分:1)

您正在使用一个部分的已过滤数组更新indexPathArray。编译器很困惑,因为您要使用[[NSIndexPath]]更新filter变量,这将导致[NSIndexPath]

而不是:

indexPathArray = indexPathArray[indexPath.section].filter { $0 != indexPath }

您应该更新该特定部分,例如:

indexPathArray[indexPath.section] = indexPathArray[indexPath.section].filter { $0 != indexPath }