Строковые литералы без необходимости экранирования специальных символов?

Есть ли в Objective-c строковый литерал, не требующий экранирования специальных символов? Другими словами, я ищу эквивалент тройной кавычки Python.

Я пытаюсь вставить HTML-код в NSString, и мне бы хотелось избежать экранирования кавычек во всех атрибутах HTML.


person pepsi    schedule 26.01.2012    source источник
comment
Вы можете использовать одинарные кавычки в своем HTML, чтобы избежать их выхода.   -  person omz    schedule 27.01.2012
comment
В C ++ 11 это возможно. См. [Мой ответ] [1] на [аналогичный вопрос] [2]. Это вам потребуется в вашем случае Objective-C ++ 11. Хотя это должно сработать. [1]: stackoverflow.com/questions/1135841/ c-multiline-string-literal / [2]: stackoverflow.com/questions/1135841/c-multiline-string-literal   -  person emsr    schedule 27.01.2012
comment
Просто примечание, тройная кавычка была реализована со времен Swift 4, см. stackoverflow.com/a/47567770/897465   -  person netigger    schedule 30.11.2017


Ответы (4)


Нет эквивалента тройной кавычке; строковые литералы всегда должны использовать escape-символы для специальных символов.

Возможно, лучше всего было бы поместить HTML-код в файл отдельно от исходного кода, а затем создать строку с помощью _ 1_ (или связанный initWithContentsOfURL:...).

person jscs    schedule 26.01.2012

В 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 по крайней мере компилируется.

person emsr    schedule 27.01.2012

Нет, к сожалению, нет ... здесь есть отличная информация о строковых литералах в obj-c:
http://blog.ablepear.com/2010/07/objective-c-tuesdays-string-literals.html

person Joel Martinez    schedule 26.01.2012

Для тех, кто читает это сейчас:

Эта функция была реализована со времен 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>
"""
person netigger    schedule 30.11.2017