在 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
。
如果您有任何其他建议,请随时添加。
我为基于 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
。
如果您有任何其他建议,请随时添加。