给定此代码...
enum Label {
case barcode(String)
case qrRCode(String)
}
let label:Label = .barcode("barcode data")
print("The label's type is '(label)'")
它打印
标签的类型是"条形码("条形码数据"(">
我试图弄清楚如何只打印
标签的类型是"条形码">
除了使用硬编码字符串编写计算属性以匹配大小写类型或手动修剪到开头括号之外,有没有办法做到这一点?
是的。要查找的字符串由具有关联值的枚举事例的唯一镜像子项的标签表示。
protocol CaseNameWithoutAssociatedValueStringConvertible: CustomStringConvertible { }
extension CaseNameWithoutAssociatedValueStringConvertible {
var description: String {
Mirror(reflecting: self).children.first!.label!
}
}
extension Label: CaseNameWithoutAssociatedValueStringConvertible { }
"( Label.barcode("🏋️♂️") )" // "barcode"
"( Label.qrRCode("🏴☠️") )" // "qrRCode"