合并<string,any =“”> </string,>的字典

时间:2014-11-07 14:43:55

标签: swift

我正在尝试将这两种字典合并在一起:

var dict = Dictionary<String, Any>

我一直在使用这样的代码来合并它们:

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

...

dict.extend(["num":123,"str":"abc","obj":UIColor.blueColor()])

这最后一行现在产生错误:

Cannot convert the expression's type '(with: Dictionary<String, Any>)' to type 'Dictionary<String, NSObject>'

所以我一直试图通过将extend的声明更改为:

来解决这个问题
    mutating func extend(with:Dictionary<String, Any>

但这导致此行self.updateValue产生此错误:

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

我最好的猜测是.updateValue是一个Objective C方法,Objective C与Any数据类型斗争。

所以我的下一步是尝试将<String, Any>对象转换为<String, NSObject>对象,希望.updateValue接受它。但是当我尝试这个时:

var dict2 = Dictionary<String, NSObject>

Xcode想要在NSObject之后放置一个半冒号。如果我这样做,它会抱怨别的东西。我以前看过这个,似乎Xcode可以说出一些不对的东西,但是它无法指责它。


所以我的问题是:

  • 我有两本词典。
  • 他们都必须是<String, Any>
  • 我必须将它们合并为一个。

任何人都知道如何做到这一点?

1 个答案:

答案 0 :(得分:2)

问题在于:

dict.extend(with:["num":123,"str":"abc","obj":UIColor.blueColor()])
            ^^^^^

类/结构方法的第一个参数没有自动外部名称,因此您必须调用:

dict.extend(["num":123,"str":"abc","obj":UIColor.blueColor()]) 

如果要使用外部名称,则必须明确声明:

mutating func extend(withDict with:Dictionary) {
                     ^^^^^^^^

或者如果您想使用与本地名称相同的内容:

mutating func extend(# with:Dictionary){
                     ^

建议阅读:External Parameter Names

这是我用于测试的代码:

var dict = Dictionary<String, Any>()

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

dict.extend(["num":123,"str":"abc","obj":UIColor.blueColor()])