Dictionary 合并具有多种类型或任意/任意对象类型的词典
我有一个Swift代码,用于将两个词典合并在一起:Dictionary 合并具有多种类型或任意/任意对象类型的词典,dictionary,swift,Dictionary,Swift,我有一个Swift代码,用于将两个词典合并在一起: extension Dictionary { mutating func extend(newVals: Dictionary <String, Any>) { for (key,value) in newVals { self.updateValue(value, forKey:key) } } } 以前我用newVals作为字典,它工作得很好,所以我猜问题
extension Dictionary {
mutating func extend(newVals: Dictionary <String, Any>) {
for (key,value) in newVals {
self.updateValue(value, forKey:key)
}
}
}
以前我用newVals
作为字典,它工作得很好,所以我猜问题是使用Any
造成的
我这里的问题是,我使用的字典混合了String
s和Int
s(以后可能还有其他类型的值)
是否要让此extend
函数使用类型Any
?您实际上不需要(也不能)在函数声明中指定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"])
Key
和Value
是Dictionary
类型中的类型别名,映射到特定实例的特定键和值类型。您也可以完全忽略
,只需说newVals:Dictionary
,这里使用的是extend函数,而Dictionary已经存在声明为字典
。使用此extend
函数时,我现在得到的错误是'Any'与'NSObject'
不同??您使用的词典之一是[String:Any]
,另一个是[String:NSObject]
-您需要通过强制转换来协调差异。尽管强制转换看起来不起作用:无法在不同大小的类型之间取消安全比特转换
-这些实例的来源是什么?你能在一开始就用不同的方式声明其中一个,这样它们就匹配了吗?@mikepollardneat-不知道它会假设相同的专门化。
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"])