我为基于Swift的iOS应用程序构建了一个基本的树数据结构,我希望能够将它打印到控制台以进行调试。所以我编写了一个遍历树(预购)的函数,并根据树中节点的深度在它前面的每个节点上打印出值,并在其前面插入一些标签。 。通过在代码中的某个地方调用函数,在调试控制台中它将打印如下:
root
node1
node1_1
node1_2
node2
node2_1
node2_1_1
node2_2
node3
node3_1
等。这很好,它允许我在代码中的重要位置调用printInfo()
,但我很快意识到我需要能够在现场打印字符串值,就像我在断点处暂停一样。所以我创建了一个计算属性infoString
,它将从树构建一个String,其中包含所有换行符(\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"
,这在技术上是正确的,因为这就是字符串,但我想实际上看换行符和标签。
那么如何打印我的字符串以便查看换行符和标签?
答案 0 :(得分:7)
我花了一些时间在StackOverflow上挖掘并调查p
(打印)和po
(打印对象)之间的差异,当然学到了很多,但我仍然无法找到什么我在找。
然后我回想起我正在调试一些密码编码代码的地方,我需要用" escapeped"来手动替换某些字符。角色的版本(因此双引号"
将替换为\"
,单引号'
将替换为\'
)。当我去测试我正在正确地替换字符时,打印字符串将导致非常复杂且难以阅读的输出字符串。我不记得我偶然发现了它,但我将String
转换为NSString
并将其打印出来。
瞧!它看起来是正确的,逃脱的角色完全按照他们应该出现。所以,记得那个伎俩,我用我的infoString
var。
果然,当我尝试po infoString as NSString
时,它的打印方式与功能版本完全相同。
这就是诀窍。在调试控制台中将其打印出来时,将String
转换为NSString
。
如果您有任何其他建议,请随时添加。