在Swift中,我们可以使用for...in循环来遍历字典中的键值对。但是,当我们需要遍历包含AnyHashable类型的字典时,会出现类型不匹配的错误。这是因为AnyHashable类型的值是运行时类型擦除的结果,无法直接使用在静态类型检查的环境中。
解决这个问题的一个方法是,在遍历字典时使用泛型来处理AnyHashable类型的值。具体代码如下:
func iterateAnyHashableDict(dict: [AnyHashable: Any]) {
for (key, value) in dict {
if let unwrappedKey = key as? String {
print("Key: \(unwrappedKey) Value: \(value)")
} else if let unwrappedKey = key as? Int {
print("Key: \(unwrappedKey) Value: \(value)")
}
// 更多 type cast 适配 AnyHashable
}
}
let anyHashableDict = [
"name": "Lucy",
"age": 25,
1: "one",
0.1: 0.123456789
] as [AnyHashable: Any]
iterateAnyHashableDict(dict: anyHashableDict)
在上面的代码中,我们定义了一个iterateAnyHashableDict函数来接受包含AnyHashable类型的字典作为参数。在函数中,我们使用for...in循环来遍历字典中的键值对。然后,我们使用类型转换(type cast)来将AnyHashable类型的键转换为具体的类型(比如String或Int),以便在打印输出时使用。最后,我们调用iterateAnyHashableDict函数并传入一个包含不同类型键值对的AnyHashable类型的字典,运行程序并观察输出结果。