2015-08-09 22 views
0

我有这个数组扩展可以从数组中删除对象。将变异函数应用于不可变数组

extension Array where Element : Equatable { 

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

我定义的字典:

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

项目是一个对象,当我尝试从字典这样的删除:

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

我收到以下错误:

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

我该怎么办从字典中删除对象? 我使用的Xcode 7 beta 4版本

回答

2

itemsSelected.values.array返回所有 字典值的(immutable)的数组,你不能用它来修改原始 字典。

为了从字典移除给定,可以在夫特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) 
     } 
    } 
}