对于 swift 枚举,如何覆盖为 lldb po 命令打印的内容?
How to override what's printed for lldb po command, for a swift enum?
此问题是由调试器打印分配给枚举的关联值引起的。当您有自定义描述时,有没有办法防止这种情况发生?对于这个简单的例子来说,这没什么大不了的,但是如果你有字典或其他大对象,它真的会污染 po
输出。
我有一个简单的 swift 枚举。在调试器中执行 po
命令时,我试图覆盖它打印的内容。但是,lldb 正在打印对象的 description
然后是枚举的转储。例如,给定以下代码:
enum TestEnum : CustomStringConvertible {
case Value1(test:Int)
var description: String {
return "Test Enum"
}
}
当我尝试打印 TestEnum 类型的对象时,或者当它嵌套在另一个要打印的对象中时,我得到这种类型的输出:
(lldb) po testEnum
▿ Test Enum
- Value1 : 1000
我只想在调试器中显示对象时打印 my 描述。我也尝试通过 debugDescription
进行此操作,结果相同。
你在某种程度上是在比较苹果和橘子。 po
和 CustomStringConvertible 并不是很密切相关。
CustomStringConvertible 和 description
指定将对象转换为字符串(因此得名)时看到的内容。所以在调试器中你想要做的是说 po String(testEnum)
。 (或者根本不使用 lldb;只需使用 print(testEnum)
从 运行 程序打印到控制台;这就是 CustomStringConvertible 的真正用途。)
当您说 po testEnum
时的显示与枚举的 反映方式有关 。如果您不喜欢那样,您会想要实现 CustomReflectable — 但我不相信您真的想要那样做,我稍后会讨论。先举个例子:
enum TestEnum : CustomStringConvertible, CustomReflectable {
case Value1(test:Int)
var description: String {
return "Test Enum"
}
func customMirror() -> Mirror {
return Mirror(reflecting:self.description)
}
}
现在 po testEnum
将产生 Test Enum
。但为什么?你真的想扔掉现在枚举给你的精彩镜像吗?在 Swift 生命的整个第一年,我们抱怨 po
在枚举上根本没有提供任何信息,甚至没有提供任何信息;在这里,您不仅学习案例,还学习该案例的相关价值。似乎逆行得要命,不说弄巧成拙,就想把它去掉。
此问题是由调试器打印分配给枚举的关联值引起的。当您有自定义描述时,有没有办法防止这种情况发生?对于这个简单的例子来说,这没什么大不了的,但是如果你有字典或其他大对象,它真的会污染 po
输出。
我有一个简单的 swift 枚举。在调试器中执行 po
命令时,我试图覆盖它打印的内容。但是,lldb 正在打印对象的 description
然后是枚举的转储。例如,给定以下代码:
enum TestEnum : CustomStringConvertible {
case Value1(test:Int)
var description: String {
return "Test Enum"
}
}
当我尝试打印 TestEnum 类型的对象时,或者当它嵌套在另一个要打印的对象中时,我得到这种类型的输出:
(lldb) po testEnum
▿ Test Enum
- Value1 : 1000
我只想在调试器中显示对象时打印 my 描述。我也尝试通过 debugDescription
进行此操作,结果相同。
你在某种程度上是在比较苹果和橘子。 po
和 CustomStringConvertible 并不是很密切相关。
CustomStringConvertible 和 description
指定将对象转换为字符串(因此得名)时看到的内容。所以在调试器中你想要做的是说 po String(testEnum)
。 (或者根本不使用 lldb;只需使用 print(testEnum)
从 运行 程序打印到控制台;这就是 CustomStringConvertible 的真正用途。)
当您说 po testEnum
时的显示与枚举的 反映方式有关 。如果您不喜欢那样,您会想要实现 CustomReflectable — 但我不相信您真的想要那样做,我稍后会讨论。先举个例子:
enum TestEnum : CustomStringConvertible, CustomReflectable {
case Value1(test:Int)
var description: String {
return "Test Enum"
}
func customMirror() -> Mirror {
return Mirror(reflecting:self.description)
}
}
现在 po testEnum
将产生 Test Enum
。但为什么?你真的想扔掉现在枚举给你的精彩镜像吗?在 Swift 生命的整个第一年,我们抱怨 po
在枚举上根本没有提供任何信息,甚至没有提供任何信息;在这里,您不仅学习案例,还学习该案例的相关价值。似乎逆行得要命,不说弄巧成拙,就想把它去掉。