在不知道对象索引的情况下从数组中删除对象?

时间:2015-01-06 23:23:14

标签: arrays core-data ios8 xcode6 nspredicate

我使用switch语句来1)切换校验符和2)在谓词数组中添加/删除谓词。有没有办法删除一个对象,如果我知道它的名字,但不知道它在数组中的索引?如果没有,那么解决方法是什么?这是我的代码的相关部分。

var colorPredicates: [NSPredicate?] = []

// Switch statement
        case blueCell:
            if (cell.accessoryType == .None) {
                colorPredicates.append(bluePredicate)
                cell.accessoryType = .Checkmark
                println(colorPredicates) // debug code to see what's in there
            } else {
                let deleteIndex = find(colorPredicates, bluePredicate) // error: NSPredicate doesn't conform to Equatable.
                muscleGroupPredicates.removeAtIndex(deleteIndex)
                cell.accessoryType = .None
                }
        default:
            println("default case")

2 个答案:

答案 0 :(得分:2)

对于数组缺少Swift方法以及缺少NSSet概念,一直有些沮丧。您是否考虑过投降到NSArray

var colorPredicates = [NSPredicate]() as NSArray

colorPredicates.removeObject(bluePredicate)

此外,我认为您的数据源设计存在缺陷:您不应该检查单元格的accessoryType以执行其他操作。该信息应该在您的数据源中,而不是在某些任意UI设计元素中。

答案 1 :(得分:-3)

我错过了'!',这会产生编译错误。

我发现此帖有用:Remove an element in an array without hard-coding the index? in Swift

// Switch statement
        case blueCell:
            if (cell.accessoryType == .None) {
                colorPredicates.append(bluePredicate)
                cell.accessoryType = .Checkmark
                println(colorPredicates) // debug code to see what's in there
            } else {
                let deleteIndex = find(colorPredicates, bluePredicate)
                colorPredicates.removeAtIndex(deleteIndex!)
                cell.accessoryType = .None
                }
        //more cases within switch statement

        default:
            println("default case")