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
类型。
参考