Getting String name of Objective-C @objc enum value in Swift?

objective-c, swift

Solution

You can also add conformance of the Obj-C enum to `CustomStringConvertible` and translate values to strings that way. As long as you don't use `default` you will be warned if any of these values change in future versions.

For example:

extension NSLayoutAttribute : CustomStringConvertible {
    public var description: String {
        switch self {
        case .left : return "left"
        case .right : return "right"
        case .top : return "top"
        case .bottom : return "bottom"
        case .leading : return "leading"
        case .trailing : return "trailing"
        case .width : return "width"
        case .height : return "height"
        case .centerX : return "centerX"
        case .centerY : return "centerY"
        case .lastBaseline : return "lastBaseline"
        case .firstBaseline : return "firstBaseline"
        case .leftMargin : return "leftMargin"
        case .rightMargin : return "rightMargin"
        case .topMargin : return "topMargin"
        case .bottomMargin : return "bottomMargin"
        case .leadingMargin : return "leadingMargin"
        case .trailingMargin : return "trailingMargin"
        case .centerXWithinMargins : return "centerXWithinMargins"
        case .centerYWithinMargins : return "centerYWithinMargins"
        case .notAnAttribute : return "notAnAttribute"
        }
    }
}

Problem

If an Objective-C function returns a status value with enum, is there a way to get the string of the enum in Swift? The same question is asked of native Swift enumeration cases, but in this question I am specifically working with `@objc enum` Objective-C enums in Swift: If I do `debugPrint("\(status)")` or `print("\(status)")` I just get the name of the enum instead of value. If I do `status.rawValue`, I get the int, but it doesn't mean much to interpret.

Original source

Related problems