在不知道对象索引的情况下从数组中删除对象?
Remove an object from an array without knowing the object's index?
我正在使用 switch 语句来 1) 切换复选标记和 2) add/remove 谓词到谓词数组。如果我知道一个对象的名称,但不知道它在数组中的索引,有没有办法删除它?如果没有,解决方法是什么?这是我的代码的相关部分。
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")
我遗漏了一个“!”,这导致了编译器错误。
我发现这个 post 有用: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")
数组缺少 Swift 方法以及缺少 NSSet
概念,这让我们有些沮丧。您是否考虑过投射到 NSArray
?
var colorPredicates = [NSPredicate]() as NSArray
和
colorPredicates.removeObject(bluePredicate)
此外,我认为您的数据源设计存在缺陷:您不应该检查单元格的 accessoryType
来做其他事情。该信息应该在您的数据源中,而不是在一些任意的 UI 设计元素中。
我正在使用 switch 语句来 1) 切换复选标记和 2) add/remove 谓词到谓词数组。如果我知道一个对象的名称,但不知道它在数组中的索引,有没有办法删除它?如果没有,解决方法是什么?这是我的代码的相关部分。
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")
我遗漏了一个“!”,这导致了编译器错误。
我发现这个 post 有用: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")
数组缺少 Swift 方法以及缺少 NSSet
概念,这让我们有些沮丧。您是否考虑过投射到 NSArray
?
var colorPredicates = [NSPredicate]() as NSArray
和
colorPredicates.removeObject(bluePredicate)
此外,我认为您的数据源设计存在缺陷:您不应该检查单元格的 accessoryType
来做其他事情。该信息应该在您的数据源中,而不是在一些任意的 UI 设计元素中。