在 Xcode 调试控制台中打印多行字符串

Printing a multiline string in Xcode debugging console

我为基于 Swift 的 iOS 应用构建了一个基本的树数据结构,我希望能够将其打印到控制台以进行调试。所以我写了一个函数,它会遍历树(预排序)并在它自己的行上打印出每个节点的值,并根据节点在树中的深度在它之前插入一些选项卡。通过在代码中某处调用该函数,在调试控制台中它会打印如下:

root
    node1
        node1_1
        node1_2
    node2
        node2_1
            node2_1_1
        node2_2
    node3
        node3_1

等这很好,它允许我在代码的重要位置调用 printInfo(),但我很快意识到我需要能够当场打印一个字符串值,就像我在断点处暂停时一样。所以我创建了一个计算的 属性 infoString,它将从树中构建一个包含所有换行符 (\n) 和制表符 (\t) 的字符串,我认为我可以打印它当我处于断点时在调试控制台中输出。

我用命令 po infoString 尝试了它,但它打印到控制台的是这样的:"root\n\tnode1\n\t\tnode1_1\n\t\tnode1_2\n\tnode2\n\t\tnode2_1\n\t\t\tnode2_1_1\n\t\tnode2_2\n\tnode3\n\t\tnode3_1",这在技术上是正确的,因为这就是字符串,但我想要实际 查看 换行符和制表符。

那么如何打印我的字符串以便看到换行符和制表符?

我花了一段时间在 Whosebug 周围挖掘并调查了 p(打印)和 po(打印对象)之间的区别,当然学到了很多东西,但我仍然找不到什么我在找。

然后我想起另一次调试一些密码编码代码时,我需要手动将某些字符替换为字符的 "escaped" 版本(因此双引号 " 将被替换使用 \",单引号 ' 将替换为 \')。当我去测试我是否正确替换字符时,打印出字符串会导致非常复杂且难以阅读的输出字符串。我不记得我是如何偶然发现它的,但我将 String 转换为 NSString 并以这种方式打印出来。

瞧!转义字符完全按照应有的方式显示,看起来是正确的。所以,记住这个技巧后,我用我的 infoString var.

试了一下

果然,当我尝试 po infoString as NSString 时,它的打印与函数版本完全一样。

这就是诀窍。当您在调试控制台中打印出来时,将 String 转换为 NSString

如果您有任何其他建议,请随时添加。