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"
大家好,
我想得到NSLog的类似结果作为打印函数,它对人们来说更可读,但我找不到这样做的方法,我得到了一些需要在枚举中进行额外处理的结果,但我正在使用其他主体的源代码,只想直接收集一些信息。
有没有简单的转变方式来做我想做的事?
谢谢~~
Eric
print
在引擎盖下使用String.init(describing:)
将您提供的任何内容转换为String
,因此您也可以这样做:
NSLog("%@", String(describing: type))
但实际上,枚举应该符合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"
}
}
}
并且您不应该依赖String(describing:)
的此默认行为,因为除非类型符合TextOutputStreamable
、CustomStringConvertible
或CustomDebugStringConvertible
,否则不会指定其行为。请参阅此处了解更多信息。