swift - 枚举的字符串插值产生“unknown()”字符串
问题描述
简单的枚举和插值:
enum Test {
case test1
case test2
case test3
}
let a = Test.test1
let b = "\(a)"
从调试窗口我得到:
a = (Test) test1
b = (String) "unknown()"
问题是这发生在我的项目中,而不是在操场上。
在项目中:
在操场上:
在日志中我得到:
SWIFT RUNTIME BUG: unable to find field metadata for type 'ProjectName.(unknown context at 0x10672213c).Test'
有什么问题?项目目标 iOS 是 9。我确实将项目转换为 swift 4.2。我在 XCode 10 测试版上遇到了这个问题,希望它会得到修复,但我想这不是 IDE 或 Swift 问题。
解决方案
您需要确保启用了“反射元数据级别”构建设置:
可以在此处找到此构建设置的描述:
反射元数据级别 (SWIFT_REFLECTION_METADATA_LEVEL)
此设置控制 Swift 编译器发出的反射元数据的级别。
- 全部:有关 Swift 结构和类的存储属性、Swift 枚举案例及其名称的类型信息被发送到二进制文件中,以便在 Memory Graph Debugger 中进行反射和分析。
- 没有名称:仅将有关存储的属性和案例的类型信息发送到二进制文件中,省略它们的名称。
-disable-reflection-names
- 无:没有反射元数据被发送到二进制文件中。在 Memory Graph Debugger 中检测涉及 Swift 类型的内存问题的准确性将降低,并且 Swift 代码中的反射可能无法发现类型的子类型,例如属性和枚举案例。
-disable-reflection-metadata
推荐阅读
- javascript - 有没有办法将 Express.Multer.File 放入 FormData 对象?
- ios - 如何使用 XCode 13 创建 FAT / Universal 框架?
- typescript - 如何键入 MongoDB 投影结果
- javascript - 如何在子 WP 主题中修改 WP 父主题中已经存在的 JS/CSS 函数(不是 php 函数)?
- java - 拆分窗格Java的实时调整
- c# - 如何在 C# 中更改 Crystal 报表查看器中的工具栏和消息框语言?
- javascript - Chrome 扩展类型错误
- r - 如何移动列中字符串的第一个实例,使其位于该字符串的组之前?
- c# - 调整大小后 RichTextBox 中的图像模糊
- excel - VBA sheet1方程输出到表2