How can I get similar print result of NSLog for int enum in swift?

75 Views Asked by At
enum ImportType: Int {
    case First = 1
    case None
    case Original
}

var type: ImportType = .First

print(type)                     --------------------> This will output "First"

NSLog("%@", String(type)        --------------------> I can't do this.

NSLog("%d", type.rawValue)      --------------------> This will output "1"

Hi All,

I want to get similar result of NSLog as the print function, it more readable for people, but I can't found a way to do this, I got some result that need to do additional handling inside the enum, but I am using other body's source code and just want to collect some information directly.

Are there easy transform way to do what I want?

Thanks~~

Eric

1

There are 1 best solutions below

0
Sweeper On BEST ANSWER

print uses String.init(describing:) under the hood to convert whatever you give it to a String, so you can do that too:

NSLog("%@", String(describing: type))

But really though, the enum should conform to CustomStringConvertible:

enum ImportType: Int, CustomStringConvertible {
    
    case First = 1
    case None
    case Original
    
    var description: String {
        switch self {
        case .First:
            return "First"
        case .None:
            return "None"
        case .Original:
            return "Original"
        }
    }
}

and you should not rely on this default behaviour of String(describing:), because its behaviour is not specified unless the type conforms to TextOutputStreamable, CustomStringConvertible or CustomDebugStringConvertible. See here for more info.