如何获取Swift中一个类型的每个成员/属性的MemoryLayout?
需求背景
我正在尝试构建一个自动合理性测试算法,当任意类型的MemoryLayout在特定场景下可能并非最优时,通过Swift Testing发出警告。
为此,我需要获取一个类型各成员的MemoryLayout;如果MemoryLayout<LessOptimal>.size返回10而非17,就能更方便地将其与stride对比来发出警告……但实际情况并非如此。
struct LessOptimal { var a: Bool var b: UInt var c: Bool }
无效方案
- “只要记住你使用的每个类型的大小就行!” • 如果只使用基础类型(Bool、UInt等),这或许有用……但实际并非如此。我想要实现自动预警,而非盲目信任写代码的人(不管是我自己还是其他人)
失败尝试
我多次尝试了Mirror/反射的不同变体:
1
Mirror(reflecting: LessOptimal()).children.forEach { child in let t = type(of: child.value) let layout = MemoryLayout<t>.self // … 无法运行! }
2
Mirror(reflecting: LessOptimal()).children.forEach { child in print(MemoryLayout.size(ofValue: child.value)) // 所有三个成员的Size都是32! }
内容的提问来源于stack exchange,提问作者user1040049
相关产品推荐
相关产品推荐

