从 Swift 中的枚举开始:
enum UnitCode:UInt {
case Unknown = 0
case Hz = 1
case GPM = 2
case M3_Hour = 3
case mA = 4
case PSI = 5
case Bar = 6
}
对于大多数人来说,这样的表达方式:
let text = "\(aUnitCode)"
将产生一个很好的结果,因为打印的形式与代码形式相匹配(例如 .Hz == "Hz")。
但是对于M3_Hour
,我想将其打印为m³/hr
. 所以符合CustomStringConvertable
,对吧?我认为以下方法行不通:
extension UnitCode: CustomStringConvertible {
var description:String {
return self == .M3_Hour ? "m³/hr" : String(describing: self)
}
}
它没。无限递归。认为这样。但是 Swift 经常让我感到惊讶(无论是好的还是坏的)。
如果枚举是超级/子类型关系,我会调用描述的“超级”版本来获取枚举的“默认”文本呈现。但我不确定如何在我的错误分支中获得“枚举的默认字符串化”,以便我可以将它调整为一个不同的值。有没有办法做到这一点?