不需要转义特殊字符的字符串字面量?

6

Objective-c中是否有不需要转义特殊字符的字符串文字形式?换句话说,我正在寻找Python三引号的等效形式。

我正在尝试将一些HTML放入NSString中,并希望避免必须为所有HTML属性转义引号。


1
你可以在HTML中使用单引号来避免转义它们。 - omz
在C++11中,您可以这样做。请参见我的答案以获取类似的问题。在您的情况下,这需要Objective-C++11。不过它应该能够工作。 - emsr
只是一条注释,"三引号"自Swift 4以来已经实现,请参见:https://dev59.com/L1_Va4cB1Zd3GeqPWLy6#47567770 - netdigger
4个回答

3
在C++11中,您可以这样做。请参见我的回答以获取有关类似问题的更多信息。此处也有类似问题的讨论。
对于此操作,您需要在Objective-C++11中进行。虽然在gcc中应该也可以正常工作。
const char * html = R"HTML(
<HTML>
 <HEAD>
   <TITLE> [Python-Dev] Triple-quoted strings and indentation
   </TITLE>
 </HEAD>
 <BODY BGCOLOR="#ffffff">
  blah blah blah
 </BODY>
</HTML>
)HTML";

int
main()
{
}

g++ -std=c++0x -o raw_string raw_string.mm 至少可以编译。


2

没有三引号的等同物,字符串文字必须始终使用转义字符来处理特殊字符。

也许最好的方法是将HTML放入与源代码分开的文件中,然后使用 -[NSString initWithContentsOfFile:encoding:error:](或相关的 initWithContentsOfURL:...)创建字符串。


1

0

针对现在正在阅读此内容的任何人:

自 Swift 4 版本以来,该功能已经实现。在此处了解更多信息:https://github.com/apple/swift-evolution/blob/master/proposals/0168-multi-line-string-literals.md

您可以执行以下操作:

let author = "Im the author!"
let x = """
    <?xml version="1.0"?>
    <catalog>
        <book id="bk101" empty="">
            <author>\(author)</author>
            <title>XML Developer's Guide</title>
            <genre>Computer</genre>
            <price>44.95</price>
            <publish_date>2000-10-01</publish_date>
            <description>An in-depth look at creating applications with XML.</description>
        </book>
    </catalog>
"""

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