我有一本字典:
var dict:[NSObject:[AnyObject]]
我想按值从字典中删除一个对象。
func removeObject(anObject:AnyObject) {
for key in dict.keys {
dict[key] = dict[key]!.filter({$0 == anObject})
}
}
但我收到此错误:
Binary operator '==' cannot be applied to two 'AnyObject' operands
删除此对象的最佳方法是什么?我希望尽可能保持通用。
答案 0 :(得分:0)
如果您要将语义上相等的对象移除到anObject
,则它和数组中的元素必须符合Equatable
协议。使你的函数像这样的通用函数:
var dict = [NSObject:[AnyObject]]()
dict["key1"] = [1,2,3,"Hello world"]
dict["key2"] = [3,4,5]
func removeObject<T: Equatable>(anObject: T) {
for key in dict.keys {
dict[key] = dict[key]!.filter {
if let element = $0 as? T where element == anObject {
return false
} else {
return true
}
}
}
}
// Remove all number 3
removeObject(3)
print(dict)
请注意,这可能会有一些奇怪的结果:
dict["key1"] = [1, 2, 3]
dict["key2"] = [4, 3.4, 3.9]
removeObject(3.0) // 3.4 and 3.9 remain
removeObject(3) // 3.4 and 3.9 gone
这是因为当你将它们转换为Int
时,3.4和3.9变为3