2015-11-09 96 views
1

我試圖創建的類型[NSObject:AnyObject]擴展上迅速可變字典

這裏可變字典擴展爲[NSObject:AnyObject]在斯威夫特一個不變的詞典擴展語法:

extension Dictionary where Key:NSObject, Value:AnyObject { 
    func addSomething() { 
     // Fails 
     self["ExampleKey"] = "ExampleValue" 
    }  
} 

然而,這種情況下self不能附加到,因爲擴展工作在不可變的字典上。問題是缺少什麼語法才能爲專有可變字典進行擴展。

編輯:更新,以解決歧義

更新

通過添加mutating前綴addSomething,我可以操作只可變dictionarys。好極了!然而,該功能仍不能正常工作

mutating func addSomething() { 
    // Error: Cannot subscript a value of type 'Dictionary<Key, Value>' with an index of type 'String' 
    self["ExampleKey"] = "ExampleValue" 
}  

如果我投"ExampleKey"一個關鍵,我得到另一個錯誤:

mutating func addSomething() { 
    let key = "ExampleKey" as! Key 
    // Error: Ambiguous reference to member 'subscript' 
    self[key] = "ExampleValue" 
}  

仍在研究如何使這個簡單的除了工作...

+0

這是什麼問題? –

+0

或郵編不工作... –

+1

或對您的問題的活動作出迴應...高興地幫助,並且我相信,如果您改進問題,downvoters會很樂意upvote –

回答

3

這工作

extension Dictionary where Key:NSObject, Value:AnyObject { 
    mutating func addSomething(forKey key:Key, value: Value) { 
     self[key] = value 
    } 
} 

var dict = [NSString:NSString]() 

dict.addSomething(forKey: "test", value: "some test") 
+0

是的!演員對價值是我失蹤。謝謝。 –

0

對於斯威夫特3+我使用這個擴展:

extension Dictionary where Key == String, Value == Any { 
    mutating func set(value optionalValue: Any?, forKey key: String) { 
    guard let value = optionalValue else { return } 

    self[key] = value 
    } 
} 

乾杯!