首页 > 解决方案 > 如果枚举的案例具有关联类型,是否可以在没有关联数据的情况下获取案例名称?

问题描述

鉴于此代码...

enum Label {
    case barcode(String)
    case qrRCode(String)
}

let label:Label = .barcode("barcode data")

print("The label's type is '\(label)'")

它打印

标签的类型是 'barcode("barcode data")'

我想弄清楚如何只打印

标签的类型是“条形码”

除了用硬编码字符串编写计算属性以匹配案例类型或手动修剪到开始括号之外,有没有办法做到这一点?

标签: swiftenumscase

解决方案


是的。您要查找的字符串由具有关联值的枚举案例的唯一镜像子项的标签表示。

protocol CaseNameWithoutAssociatedValueStringConvertible: CustomStringConvertible { }

extension CaseNameWithoutAssociatedValueStringConvertible {
  var description: String {
    Mirror(reflecting: self).children.first!.label!
  }
}
extension Label: CaseNameWithoutAssociatedValueStringConvertible { }

"\( Label.barcode("️‍♂️") )" // "barcode"
"\( Label.qrRCode("‍☠️") )" // "qrRCode"

推荐阅读