You could probably ask the runtime to get the case name, but keep in mind things can change without notice, so use at your own risk:
@_silgen_name("swift_EnumCaseName")
func _getEnumCaseName<T>(_ value: T) -> UnsafePointer<CChar>?
func getEnumCaseName<T>(for value: T) -> String? {
if let stringPtr = _getEnumCaseName(value) {
return String(validatingUTF8: stringPtr)
}
return nil
}
enum Foo {
case bar1
case bar2(Int)
}
let b1 = Foo.bar1
let b2 = Foo.bar2(0)
print(getEnumCaseName(for: b1)) // bar1
print(getEnumCaseName(for: b2)) // bar2