Как я могу разделить строку на несколько строк, например ниже?
var text:String = "This is some text
over multiple lines"
Обратите внимание, что с 2017 года вы просто используете тройные кавычки.
Как я могу разделить строку на несколько строк, например ниже?
var text:String = "This is some text
over multiple lines"
Обратите внимание, что с 2017 года вы просто используете тройные кавычки.
Swift 4 включает поддержку многострочных строковых литералов. В дополнение к символам новой строки они также могут содержать неэкранированные кавычки.
var text: String = """
This is some text
over multiple lines
"""
Старые версии Swift не позволяют вам иметь один литерал над несколькими строками, но вы можете добавлять литералы вместе по нескольким строкам:
var text: String = "This is some text " +
"over multiple lines"
Я использовал расширение на 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!"
Это было первое разочарование в 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"
Как указано в примере, повторное использование +
-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"])
Swift:
@connor - правильный ответ, но если вы хотите добавить строки в оператор печати, то вы ищете \n
и/или \r
, они называются escape-последовательностями или экранированными символами, это ссылка на документацию Apple по этой теме..
Пример:
print("First line\nSecond Line\rThirdLine...")
Возможны многострочные строки с 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.
Добавляя к ответу @Connor, необходимо также \n. Вот исправленный код:
var text:String = "This is some text \n" +
"over multiple lines"
В следующем примере показано многострочное продолжение с использованием скобки в качестве простого обходного пути для ошибки 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)
.
.
.
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)
Вы можете использовать unicode equals для ввода или \n
и реализовать их внутри своей строки. Например: \u{0085}
.
Другой способ, если вы хотите использовать строковую переменную с некоторым предопределенным текстом,
var textFieldData:String = "John"
myTextField.text = NSString(format: "Hello User, \n %@",textFieldData) as String
myTextField.numberOfLines = 0
Пример
var yourString = "first line \n second line \n third line"
В случае, если вы не найдете подходящего <+ p >
Один из подходов состоит в том, чтобы установить текст метки в атрибутText и обновить строковую переменную, чтобы включить HTML для разрыва строки (<br />
).
Например:
var text:String = "This is some text<br />over multiple lines"
label.attributedText = text
Вывод:
This is some text
over multiple lines
Надеюсь, это поможет!
Я попробовал несколько способов, но нашел еще лучшее решение: Просто используйте элемент "Текстовый вид". В этом тексте отображается несколько строк автоматически! Найдено здесь: UITextField несколько строк