Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Dictionary 合并具有多种类型或任意/任意对象类型的词典_Dictionary_Swift - Fatal编程技术网

Dictionary 合并具有多种类型或任意/任意对象类型的词典

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作为字典,它工作得很好,所以我猜问题

我有一个Swift代码,用于将两个词典合并在一起:

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