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
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.