如何使用其原始索引路径从数组中删除对象?

时间:2015-06-06 10:46:58

标签: ios swift

我有一个UICollectionView,用户可以从中选择要添加到数组的单元格中的数据。我试图在点击时突出显示所选单元格,并在再次点击时取消突出显示它们。在突出显示和取消突出显示的相同代码中,我想添加/删除数组中的数据。将数据添加到数组中没有问题,但我无法弄清楚如何在未突出显示时将其删除。

代码在这里:

wkhtmltopdf http://google.com google.pdf

3 个答案:

答案 0 :(得分:2)

使用removeAtIndex(index: Int)方法删除项目

var removeFromList = [NSString]()

 if let index = find(removeFromList, objectIds[indexPath.row] as! NSString) {
     removeFromList.removeAtIndex(index)
 }

答案 1 :(得分:0)

由于数组正在用作列表,因此您需要在删除元素之前找到索引。使用Swift的find方法:

removeFromList.removeAtIndex(find(removeFromList, objectIds[indexPath.row])!)

此方法的问题是find不能与AnyObject一起使用。循环遍历数组并比较每个术语也不会起作用,因为AnyObject无法比较。您需要将removeFromList和objectId更改为更具体的类。

使这段代码变得更漂亮"并且当它试图删除不在数组中的东西时阻止你的应用程序崩溃,你应该使用数组类的扩展。不幸的是,您必须为每种数据类型创建一个新函数。

func removeObjMyClass(inout arr: [MyClass], obj: MyClass) {
    if let index = find(arr, obj) {
        arr.removeAtIndex(index)
    }
}

removeObjMyClass(&removeFromList, objectIds[indexPath.row])

答案 2 :(得分:0)

使用字典:

var removeFromList = [NSIndexPath:AnyObject]()

if cell!.tag == 0 {
    cell!.layer.borderWidth = 2.0
    cell!.layer.borderColor = UIColor.blueColor().CGColor
    removeFromList[indexPath] = objectIds[indexPath.row]
    cell!.tag = 1
} else {
    cell!.layer.borderWidth = 0.0
    cell!.tag = 0
    removeFromList.removeValueForKey(indexPath)
}