Swift如何获取枚举case自身名称字符串,相关实现能否过苹果审核?
结论
- 你用到的
@_silgen_name("swift_EnumCaseName")属于私有API,提交到App Store有极高概率被审核驳回。 - 所有带下划线前缀的Swift注解、标准库内部符号都不属于公开接口范畴,苹果没有承诺其跨版本兼容性,即使侥幸通过审核,后续iOS或Swift版本升级也随时可能出现功能异常甚至崩溃。
公开API替代方案
因为你的CodingKeys已经遵守了CaseIterable协议,可以通过Swift官方公开的反射机制实现需求,无审核风险:
extension CaseIterable where Self: Equatable { /// 获取枚举case的原始名称,而非rawValue var caseName: String { for (idx, item) in Self.allCases.enumerated() where item == self { let mirror = Mirror(reflecting: item) if let label = mirror.children.first?.label { return label } // 兜底适配无关联值的枚举 return "\(Self.allCases[idx])".split(separator: ".").last.map(String.init) ?? "" } return "" } }
调用示例
print(Stuff.CodingKeys.id.caseName) // 输出 "id" print(Stuff.CodingKeys.id.rawValue) // 输出 "Banana"
内容的提问来源于stack exchange,提问作者zaitsman
相关产品推荐
相关产品推荐

