文字和字符串换行符之间的快速差异

时间:2018-03-19 23:13:03

标签: swift xml

我有一个适用于iOS的Swift应用程序,它继承自XMLParser以解析XML文件。在一个部分中,我抓取了一个可能包含\n个字符的属性。这些字符串稍后用作按钮标题。

示例XML:

<button title="TitleLine1\nTitleLine2"/>

在我的didStartElement()函数中:

var buttonTitle : String = attributeDict["title"]

这正如我所期望的那样抓住标题,但是稍后当我创建按钮并应用标题时,新行字符只是在按钮上直接打印而不是将按钮标题设为两行。

我希望按钮看起来像这样:

TitleLine1
TitleLine2

但它最终成为:

TitleLine1\nTitleLine2

如果我完全忘记了XML解析,只需用这样的文字字符串对按钮标题进行硬编码,那么新行就可以了:

button.setTitle("TitleLine1\nTitleLine2", for: .normal)

但是,使用我的变量设置它会导致换行符在行中打印:

button.setTitle(buttonTitle, for: .normal)

XMLParser处理字符串有什么不同的方式吗?如果我只使用XML解析字符串与文字字符串进行print(),我会注意到相同的行为。

1 个答案:

答案 0 :(得分:3)

在编译期间,Swift字符串文字中的\n将转换为实际的换行符。

在运行时获得的某些文本中,后跟字符\的字符n没有任何特殊含义。

你有几个选择。解析XML时,可以处理所有字符串并将字符序列\n的出现替换为实际的换行符:

let str = someXMLValue.replacingOccurrences(of: "\\n", with: "\n")

另一种选择是更改XML结构以使用标题的元素而不是属性。然后你可以在标题中添加一个真正的换行符:

<button>
    <title>TitleLine1
TitleLine2</title>
</button>

然后你的Swift代码不需要做任何特别的事情来处理换行。