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

10

我为基于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",从技术上讲这是正确的,因为这就是字符串,但我想实际上看到换行符和制表符。

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

1个回答

22

我花了一些时间在StackOverflow上查找并调查了p(打印)和po(打印对象)之间的区别,并且确实学到了很多,但我还是没有找到我要找的东西。

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

看!它看起来是正确的,转义字符显示出来的正是应该显示的。因此,记住这个技巧后,我尝试了一下我的infoString变量。

果然,当我尝试使用po infoString as NSString时,它的输出完全像函数版本一样。

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

如果你有其他建议,请随意添加。


这非常有用!我想知道为什么会这样,是否有其他方法可以打印到控制台并换行。 - Kamen Dobrev

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接