反映类型时Swift Mirror Children集合为空

zai*_*man 5 reflection swift

我正在尝试获取结构上所有属性的列表。

我使用了这个代码:

struct MyBanana {
    var b: String?
}

Mirror(reflecting: MyBanana.self).children.isEmpty // returns true
Run Code Online (Sandbox Code Playgroud)

为什么我的.children收藏是空的?

我需要能够从类型而不是实例中获取这些。

Ale*_*ica 4

我需要能够从类型而不是实例中获取这些。

你不能。斯威夫特的反思故事尚未充实。反射所需的运行时元数据在 Swift 中已经存在很长时间了。Xcode、LLVM 调试器和 Instruments 严重依赖它,但它的更改过于频繁,以至于无法在其上构建 API。

既然 ABI 稳定性已经建立,我预计反思将很快得到解决。在那之前,您可以使用多个第三方反射库。他们的作者对运行时元数据进行了逆向工程,并在其上构建了一个 API。您只需确保该库自 Swift 5 以来已更新。