如何在swift中为int enum获得类似的NSLog打印结果


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:)的此默认行为,因为除非类型符合TextOutputStreamableCustomStringConvertibleCustomDebugStringConvertible,否则不会指定其行为。请参阅此处了解更多信息。

最新更新