枚举的字符串插值产生"unknown()"字符串

Bor*_*nko 4 swift xcode10

简单的枚举和插值:

enum Test {
    case test1
    case test2
    case test3
}

let a = Test.test1
let b = "\(a)"
Run Code Online (Sandbox Code Playgroud)

从调试窗口我得到:

a = (Test) test1
b = (String) "unknown()"
Run Code Online (Sandbox Code Playgroud)

问题是这发生在我的项目中,而不是在操场上.

在项目中:

在项目中

在操场上:

在操场上

在日志中我得到:

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问题.

Cri*_*tik 8

您需要确保启用"反射元数据级别"构建设置:

在此输入图像描述

可以在此处找到此构建设置的说明:

反射元数据级别(SWIFT_REFLECTION_METADATA_LEVEL)

此设置控制Swift编译器发出的反射元数据的级别.

  • 全部:类型信息有关Swift结构和类的存储属性,Swift枚举案例及其名称,将被发送到二进制文件中,以便在Memory Graph Debugger中进行反射和分析.
  • 没有名称:只有关于存储属性的类型信息和案例被发送到二进制文件中,并且省略了它们的名称. -disable-reflection-names
  • 无:没有反射元数据发送到二进制文件.在Memory Graph Debugger中检测涉及Swift类型的内存问题的准确性将降低,Swift代码中的反射可能无法发现类型的子类,例如属性和枚举案例.-disable-reflection-metadata