Arrays 从Swift字典中删除任何对象

Arrays 从Swift字典中删除任何对象,arrays,swift,dictionary,Arrays,Swift,Dictionary,我有一本字典: 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 'AnyO

我有一本字典:

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

移除此对象的最佳方法是什么?我希望尽可能保持它的通用性。

如果您希望删除语义上等于
一个对象的对象,它和数组中的元素必须符合
equalable
协议。将函数设置为通用函数,如下所示:

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)

这是因为当你将3.4和3.9转换为
Int

时,它们在引用上是等价的吗?如果是这样,请使用
==
。您无法比较
任何对象
,因为第一个对象可能是
圆圈
,第二个对象是
长颈鹿
,您如何比较它们?如果您选择向下转换,然后根据您试图完成的任务,一个选项是使用NSObject:这似乎有效:
func removeObject(anObject:AnyObject){for key in dict.keys{dict[key]=dict[key]!.filter({$0!==anObject}}}
您真的意思是
==
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