Если регистр enum имеет связанный тип, возможно ли получить имя регистра без связанных данных? - PullRequest
0 голосов
/ 22 января 2020

Учитывая этот код ...

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

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

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

Он печатает

Тип этикетки - "штрих-код (" данные штрих-кода ")"

Я пытаюсь выяснить, как печатать только

Тип этикетки - «штрих-код»

Есть ли способ сделать это, кроме написания вычисляемого свойства с жестко закодированными строками, чтобы соответствовать типам случая или ручной обрезкой до вводной пары?

1 Ответ

2 голосов
/ 22 января 2020

Да. Строка, которую вы ищете, представлена ​​меткой единственного зеркального дочернего элемента регистрационного регистра со связанным значением.

protocol CaseNameWithoutAssociatedValueStringConvertible: CustomStringConvertible { }

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

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