You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 21:57:04