swift - 在 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 操场上尝试这个时,它也有效。但是,当我变成"Zero" as Any
它时Any(0)
,会给出以下内容
错误:错误:Dictionary.xcplaygroundpage:41:34:错误:协议类型'Any'无法实例化 var mixedMap4 = [AnyHashable(0): Any("Zero") ,
谢谢你的回答
解决方案
线索在错误消息中。
AnyHashable
是一个类型擦除底层可哈希类型的结构,因此可以直接实例化为对象
Any
是一个协议,因此不能直接实例化,尽管所有其他类型都可以遵守它,因此可以将String
诸如“零”之类的转换为Any
但Any(String)
没有意义。
对我来说,这一切都感觉就像一大堆麻烦等着发生!
推荐阅读
- python - Flink:在 MATCH_RECOGNIZE 中使用 Python UDF 的最佳替代方案是什么?
- kotlin - 无法从 Class.forName() 获取 HashMap 类
- django - Django 尝试保存 AbstractUser 模型时出错
- selenium-chromedriver - Webdriver.io - 无法在 angular gridster 组件上执行拖放操作
- c - 如何在 Windows 中使用 C 中的 GetFullPathName 打印文件路径
- angular - 导航到新路线时出现 Angular Material MatTooltip 问题
- javascript - 您如何使用 Xpath 在 div 内部 html 中查找“一般”的所有锚标记
- json - 使用新列比较 Java 中的 2 个 spark 数据帧以打印结果
- c# - 如何在文本编辑器 .NET Core 中拆分图像(Base64 字符串)
- mysql - Mysql SQL DELETE JOIN 以特定顺序(由于限制)