将变异函数应用于可模拟数组

时间:2015-08-09 07:42:31

标签: swift

我有这个数组扩展来从数组中删除对象。

extension Array where Element : Equatable {

    mutating func removeObject(object : Generator.Element) {
        if let index = self.indexOf(object) {
            self.removeAtIndex(index)
        }
    }
}

我定义了一个词典:

var itemsSelected: [NSIndexPath: Item] = [:]

Item是一个对象,当我尝试将它从字典中删除时:

self.itemsSelected.values.array.removeObject(item)

我收到以下错误:

Immutable value of type [Base.Generator.Element] only has mutating members named 'removedObject'

如何从字典中删除对象? 我正在使用Xcode 7 beta 4。

1 个答案:

答案 0 :(得分:2)

itemsSelected.values.array返回一个(不可变的)数组 字典值,你不能用它来修改原文 字典。

要从字典中删除给定的,您可以定义一个 Swift 2中类似的Dictionary扩展名:

extension Dictionary where Value : Equatable {

    mutating func removeValue(value : Value) {
        if let index = self.indexOf({ $0.1 == value }) {
            self.removeAtIndex(index)
        }
    }
}

此处indexOf()将字典视为键/值序列 对

但请注意,如果字典中的多个键具有相同的值,那么 这将只删除其中一个。删除所有键/值对 使用给定值,您可以将if let替换为while let

extension Dictionary where Value : Equatable {

    mutating func removeValue(value : Value) {
        while let index = self.indexOf({ $0.1 == value }) {
            self.removeAtIndex(index)
        }
    }
}