我正在尝试将这两种字典合并在一起:
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>
。任何人都知道如何做到这一点?
答案 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){
^
这是我用于测试的代码:
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()])