如何在 swift 中获得类似 NSLog for int enum 的打印结果?
How can I get similar print result of NSLog for int enum in swift?
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 结果,它对人们来说更具可读性,但我找不到办法做到这一点,我得到了一些需要在枚举中进行额外处理的结果,但是我用的是别人的源码,只是想直接收集一些信息。
有没有简单的转换方法来做我想做的事?
谢谢~~
埃里克
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
,否则不会指定其行为。有关详细信息,请参阅 here。
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 结果,它对人们来说更具可读性,但我找不到办法做到这一点,我得到了一些需要在枚举中进行额外处理的结果,但是我用的是别人的源码,只是想直接收集一些信息。
有没有简单的转换方法来做我想做的事?
谢谢~~
埃里克
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
,否则不会指定其行为。有关详细信息,请参阅 here。