swift可变字典上的扩展

时间:2015-11-09 23:20:31

标签: swift dictionary

我正在尝试在类型[NSObject:AnyObject]

的可变字典上创建扩展

以下是Swift中[NSObject:AnyObject]的不可变字典扩展的语法:

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

但是,在这种情况下,self无法追加,因为扩展名适用于不可变字典。问题是缺少什么语法才能对可变字典进行扩展。

编辑:已更新以解决歧义

更新

通过将mutating前缀添加到addSomething,我只能操作可变的字典。好极了!但是,该功能仍无法正常工作

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"
}    

还在研究如何让这个简单的加法工作......

2 个答案:

答案 0 :(得分:4)

这有效

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")

答案 1 :(得分:0)

对于Swift 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
  }
}

干杯!