如何在 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:) 的默认行为,因为除非类型符合 TextOutputStreamableCustomStringConvertibleCustomDebugStringConvertible,否则不会指定其行为。有关详细信息,请参阅 here