从Swift词典中删除AnyObject

时间:2016-03-10 18:37:44

标签: 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 'AnyObject' operands

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

1 个答案:

答案 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