2014-11-06 78 views
0

我有用于合并两个字典一起此银行代码:利用多种类型的合并字典,或任一/ AnyObject类型

extension Dictionary { 
    mutating func extend(newVals: Dictionary <String, Any>) { 
     for (key,value) in newVals { 
      self.updateValue(value, forKey:key) 
     } 
    } 
} 

包含.updateValue(, forKey:)线生成以下错误:

'protocol<>' is not convertible to 'Value' 

此前我有newVals作为Dictionary <String, String>它工作得很好,所以我的猜测是问题是由使用Any引起的。

我在这里的问题是,我正在使用字典与String s和Int s(以及可能其他类型的价值稍后)的混合物。

反正有没有这extend函数与Any类型一起使用?

回答

2

你实际上并不需要(你不能)指定的函数声明Any型 - 你需要有newValues字典的亚型匹配它的扩展字典:

extension Dictionary { 
    mutating func extend(newVals: Dictionary) { 
     for (key,value) in newVals { 
      self.updateValue(value, forKey:key) 
     } 
    } 
} 

var dict = ["one": 1, "two": 2, "hello": "goodbye"] 
dict.extend(["three": 3]) 
dict.extend(["foo": "bar"]) 

KeyValueDictionary类型中的类型别名,它映射到特定实例的特定键和值类型。

+1

你完全可以错过'',这里也只是说'newVals:Dictionary' – 2014-11-06 16:21:46

+0

这个扩展函数被用于字典已经被声明为'Dictionary '的地方。当使用这个'extend'函数时,我现在得到错误''Any'与'NSObject''不一样? – Jimmery 2014-11-06 16:23:09

+0

你正在使用的字典之一是'[String:Any]',另一个是'[String:NSObject]' - 你需要调和与演员的不同之处。 – 2014-11-06 16:23:51

相关问题