在 Swift 中包装值和显式声明值作为类型之间的区别

Difference between wrapping a value and explicitly declaring value as a type in Swift

我在在线教程中遇到了像这样的异构字典定义:

var mixedMap4 = [AnyHashable(0): "Zero" as Any,
                 AnyHashable(1): 1.0 as Any,
                 AnyHashable("pi"): 3.14 as Any]

我想知道作者为什么选择写 AnyHashable(0) 而不是 0 as AnyHashable。当我在 Swift playground 上尝试这个时,它也有效。但是,当我将 "Zero" as Any 变成 Any(0) 时,它会给出以下

error: error: The Dictionary.xcplaygroundpage:41:34: error: protocol type 'Any' cannot be instantiated var mixedMap4 = [AnyHashable(0): Any("Zero") ,

感谢您的回答

线索在错误信息中。

AnyHashable 是一个类型擦除底层可哈希类型的结构,因此可以直接实例化为对象

Any 是一个协议,因此不能直接实例化,尽管所有其他类型都可以遵守它,因此 String 例如 "Zero" 可以转换为AnyAny(String) 没有意义。

对我来说,这一切就像一大堆等待发生的麻烦!