Swift - Разделить строку на несколько строк

Как я могу разделить строку на несколько строк, например ниже?

var text:String = "This is some text
                   over multiple lines"

Обратите внимание, что с 2017 года вы просто используете тройные кавычки.

Ответ 1

Swift 4 включает поддержку многострочных строковых литералов. В дополнение к символам новой строки они также могут содержать неэкранированные кавычки.

var text: String = """
    This is some text
    over multiple lines
"""

Старые версии Swift не позволяют вам иметь один литерал над несколькими строками, но вы можете добавлять литералы вместе по нескольким строкам:

var text: String = "This is some text " +
                  "over multiple lines"

Ответ 2

Я использовал расширение на String для достижения многострочных строк, избегая ошибок в компиляторе. Он также позволяет указать разделитель, чтобы вы могли использовать его как функцию объединения Python

extension String {
    init(sep:String, _ lines:String...){
        self = ""
        for (idx, item) in lines.enumerated() {
            self += "\(item)"
            if idx < lines.count-1 {
                self += sep
            }
        }
    }

    init(_ lines:String...){
        self = ""
        for (idx, item) in lines.enumerated() {
            self += "\(item)"
            if idx < lines.count-1 {
                self += "\n"
            }
        }
    }
}



print(
    String(
        "Hello",
        "World!"
    )
)
"Hello
World!"

print(
    String(sep:", ",
        "Hello",
        "World!"
    )
)
"Hello, World!"

Ответ 3

Это было первое разочарование в Swift, которое я заметил. Почти все языки сценариев допускают многострочные строки.

С++ 11 добавлены строковые литералы, которые позволяют определить свой собственный терминатор

С# имеет @literals для многострочных строк.

Даже простые C и, таким образом, старомодные С++ и Objective-C допускают concatentation просто путем смешивания нескольких литералов, поэтому котировки сбрасываются. Пробелы не учитываются, когда вы делаете это, чтобы вы могли поместить их на разные строки (но вам нужно добавить свои собственные символы перевода строки):

const char* text = "This is some text\n"
                   "over multiple lines";

Поскольку swift не знает, что вы поместили текст по нескольким строкам, мне нужно исправить пример connor, аналогично моему образцу C, явно указав новую строку:

var text:String = "This is some text \n" +
                  "over multiple lines"

Ответ 4

Как указано в примере, повторное использование + -Operator в одном выражении может привести к зависанию XCode Beta (только что проверено с помощью XCode 6 Beta 5): Xcode 6 Beta не компилируя

Альтернативой для многострочных строк в настоящее время является использование массива строк и reduce с +:

var text = ["This is some text ",
            "over multiple lines"].reduce("", +)

Или, возможно, проще, используя join:

var text = "".join(["This is some text ",
                    "over multiple lines"])

Ответ 5

Swift:

@connor - правильный ответ, но если вы хотите добавить строки в оператор печати, то вы ищете \n и/или \r, они называются escape-последовательностями или экранированными символами, это ссылка на документацию Apple по этой теме..

Пример:

print("First line\nSecond Line\rThirdLine...")

Ответ 6

Возможны многострочные строки с Swift 4.0, но есть несколько правил:

  • Вам нужно начинать и заканчивать свои строки тремя двойными кавычками, """.
  • Содержимое вашей строки должно начинаться в отдельной строке.
  • Завершение """ также должно начинаться в отдельной строке.

Кроме того, вам хорошо идти! Вот пример:

let longString = """
When you write a string that spans multiple
lines make sure you start its content on a
line all of its own, and end it with three
quotes also on a line of their own.
Multi-line strings also let you write "quote marks"
freely inside your strings, which is great!
"""

Для получения дополнительной информации см. что нового в Swift 4.

Ответ 7

Добавляя к ответу @Connor, необходимо также \n. Вот исправленный код:

var text:String = "This is some text \n" +
                  "over multiple lines"

Ответ 8

В следующем примере показано многострочное продолжение с использованием скобки в качестве простого обходного пути для ошибки Swift с версии Xcode 6.2 Beta, где она жалуется, что выражение слишком сложно разрешить в разумные сроки и рассмотреть возможность его разбиения вниз на более мелкие куски:

    .
    .
    .
    return String(format:"\n" +
                    ("    part1:    %d\n"    +
                     "    part2:    %d\n"    +
                     "    part3:  \"%@\"\n"  +
                     "    part4:  \"%@\"\n"  +
                     "    part5:  \"%@\"\n"  +
                     "    part6:  \"%@\"\n") +
                    ("    part7:  \"%@\"\n"  +
                     "    part8:  \"%@\"\n"  +
                     "    part9:  \"%@\"\n"  +
                     "    part10: \"%@\"\n"  +
                     "    part12: \"%@\"\n") +
                     "    part13:  %f\n"     +
                     "    part14:  %f\n\n",
                    part1, part2, part3, part4, part5, part6, part7, part8, 
                    part9, part10, part11, part12, part13, part14)
    .
    .
    .

Ответ 9

Swift 4 рассмотрел эту проблему, предоставив многословную литературу строки. Чтобы начать строковый литерал, добавьте три двойных кавычки ( "" ) и нажмите клавишу возврата. После нажатия клавиши возврата, начинающего запись строк с любыми переменными, разрывы строк и двойные кавычки, как и в записной книжке или в любом текстовом редакторе. Для завершения многострочного литерала строки снова напишите ( "" ) в новой строке.

См. ниже пример

     let multiLineStringLiteral = """
    This is one of the best feature add in Swift 4
    It let’s you write "Double Quotes" without any escaping
    and new lines without need of "\n"
    """

print(multiLineStringLiteral)

Ответ 10

Вы можете использовать unicode equals для ввода или \n и реализовать их внутри своей строки. Например: \u{0085}.

Ответ 11

Другой способ, если вы хотите использовать строковую переменную с некоторым предопределенным текстом,

var textFieldData:String = "John"
myTextField.text = NSString(format: "Hello User, \n %@",textFieldData) as String
myTextField.numberOfLines = 0

Ответ 12

Пример

var yourString = "first line \n second line \n third line"

В случае, если вы не найдете подходящего <+ p >

Ответ 13

Один из подходов состоит в том, чтобы установить текст метки в атрибутText и обновить строковую переменную, чтобы включить HTML для разрыва строки (<br />).

Например:

var text:String = "This is some text<br />over multiple lines"
label.attributedText = text

Вывод:

This is some text
over multiple lines

Надеюсь, это поможет!

Ответ 14

Я попробовал несколько способов, но нашел еще лучшее решение: Просто используйте элемент "Текстовый вид". В этом тексте отображается несколько строк автоматически! Найдено здесь: UITextField несколько строк