代码之家  ›  专栏  ›  技术社区  ›  Chuck Claunch

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

  •  2
  • Chuck Claunch  · 技术社区  · 8 年前

    我有一个用于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)
    

    但是,使用my变量设置它会导致换行符按行打印:

    button.setTitle(buttonTitle, for: .normal)
    

    XMLParser处理字符串的方式是否不同?如果我只是做一个 print() 使用XML解析字符串与文本字符串。

    1 回复  |  直到 8 年前
        1
  •  3
  •   rmaddy    8 年前

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

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

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

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

    另一种选择是更改XML结构,将元素用作标题,而不是属性。然后,您可以在标题中添加一条真正的新行:

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

    然后,您的Swift代码不需要做任何特殊的事情来处理换行符。