2015-08-09 17 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) 
     } 
    } 
}