此问题是由调试器打印分配给枚举的关联值引起的。当您有自定义描述时,有没有办法防止这种情况发生?对于这个简单的例子来说,这没什么大不了的,但是如果你有字典或其他大对象,它真的会污染 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
我只想在调试器中显示对象时打印我的 描述。我还尝试通过 debugDescription
执行此操作,结果相同。
最佳答案
在某种程度上,您是在比较苹果和橙子。 po
和 CustomStringConvertible 的关系并不是很密切。
CustomStringConvertible 和 description
规定了当您将对象转换为 String 时看到的内容(因此得名)。所以在调试器中你想要做的是说 po String(testEnum)
。 (或者根本不使用 lldb;只需使用 print(testEnum)
从正在运行的程序打印到控制台;这就是 CustomStringConvertible 的真正用途。)
当您说po testEnum
时的显示与反射(reflect) 枚举的方式有关。如果您不喜欢那样,您会想要实现 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
根本没有提供任何信息,甚至没有提供任何信息;在这里,您不仅学习案例,还学习该案例的相关值(value)。想要消除它似乎非常倒退,更不用说弄巧成拙了。
关于ios - 如何覆盖为 lldb po 命令打印的内容,以获得快速枚举?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35690789/