Swift3中的AnyHashable
在Swift 3的标准库中添加了AnyHashable这一新类型,其用途是在需要Hash值的集合中,可以混合使用多种Hashable类型。例如,字典的key值,其要求是Hashable类型,如果希望key值是任意实现了Hashable协议的类型,则在声明字典时,可以使用AnyHashable作为key的类型,如下代码所示:
let description: [AnyHashable: Any] = [
AnyHashable("😄"): "emoji",
AnyHashable(42): "an Int",
AnyHashable(34.2): "a Double",
AnyHashable(Set(["a", "b"])): "a set of strings"
]
print(description[AnyHashable(42)]!) // an Int
print(description[AnyHashable(34)]) // nil
print(description[AnyHashable(Set(["a", "b"]))]!) // a set of strings
早先,在ObjC与Swift混合编程中,ObjC的NSDictionary导入到Swift时,是转换成[NSObject: AnyObject]类型。使用NSObject作为key的类型,因为NSObject是最接近于AnyObject且实现了Hashable的类型。不过Swift希望在标准库中限制AnyObject的使用,而更多的使用Any,所以加入了AnyHashable类型。
参考