Getting the name of a Swift enum value

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
2 Likes