Как можно разбить строку на несколько строк, как показано ниже?
var text:String = "This is some text
over multiple lines"
Как можно разбить строку на несколько строк, как показано ниже?
var text:String = "This is some text
over multiple lines"
Ответы:
Swift 4 включает поддержку многострочных строковых литералов . В дополнение к новым строкам они также могут содержать неэкранированные кавычки.
var text = """
This is some text
over multiple lines
"""
Более старые версии Swift не позволяют вам иметь один литерал в несколько строк, но вы можете добавлять литералы вместе в несколько строк:
var text = "This is some text\n"
+ "over multiple lines\n"
\nперсонажа. Например, в REPL: println("foo\n" + "bar")печатается fooи barна отдельных строках.
Я использовал расширение для 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!"
enumerate(lines)сейчасlines.enumerate()
joinWithSeparatorодно и то же? ["Hello", "World!"].joinWithSeparator(", ")
Это была первая разочаровывающая вещь о Swift, которую я заметил. Почти все языки сценариев допускают многострочные строки.
C ++ 11 добавил необработанные строковые литералы, которые позволяют вам определять свой собственный терминатор
C # имеет свои @literals для многострочных строк.
Даже простой C и, следовательно, старомодный C ++ и Objective-C допускают конкатенацию, просто помещая несколько литералов рядом, поэтому кавычки свернуты. Пробелы не учитываются, когда вы делаете это, поэтому вы можете поместить их в разные строки (но нужно добавить свои собственные новые строки):
const char* text = "This is some text\n"
"over multiple lines";
Поскольку swift не знает, что вы поместили текст в несколько строк, я должен исправить пример Коннора, точно так же, как мой пример C, явно указав новую строку:
var text:String = "This is some text \n" +
"over multiple lines"
Начиная с 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 для получения дополнительной информации.
Как указывает litso, повторное использование +оператора -Operator в одном выражении может привести к зависанию бета-версии XCode (только что проверено с помощью бета-версии XCode 6): бета-версия Xcode 6 не компилируется
Альтернативой многострочным строкам на данный момент является использование массива строк и reduceего с +:
var text = ["This is some text ",
"over multiple lines"].reduce("", +)
Или, возможно, проще, используя join:
var text = "".join(["This is some text ",
"over multiple lines"])
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)
Swift:
@connor - правильный ответ, но если вы хотите добавить строки в оператор печати, то, что вы ищете, \nи / или \rони называются Escape-последовательности или Escape-символы, это ссылка на документацию Apple по этой теме.,
Пример:
print("First line\nSecond Line\rThirdLine...")
Добавление к ответу @Connor также должно быть \ n. Вот пересмотренный код:
var text:String = "This is some text \n" +
"over multiple lines"
В следующем примере показано многострочное продолжение с использованием круглых скобок в качестве простого обходного пути для ошибки Swift начиная с бета-версии Xcode 6.2, где он жалуется, что выражение слишком сложное, чтобы его можно было разрешить за разумное количество времени, и рассмотреть возможность разбивки его на меньшие куски:
.
.
.
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)
.
.
.
Образец
var yourString = "first line \n second line \n third line"
В случае, если вы не нашли подходящий оператор +
Один из подходов состоит в том, чтобы установить текст метки на attribuText и обновить строковую переменную, чтобы включить HTML для переноса строки (<br /> ).
Например:
var text:String = "This is some text<br />over multiple lines"
label.attributedText = text
Вывод:
This is some text
over multiple lines
Надеюсь это поможет!
Stringзначение (текст) NSAttributedString?свойству (label.attributedText).
Вот фрагмент кода для разделения строки на n символов, разделенных на строки:
//: A UIKit based Playground for presenting user interface
import UIKit
import PlaygroundSupport
class MyViewController : UIViewController {
override func loadView() {
let str = String(charsPerLine: 5, "Hello World!")
print(str) // "Hello\n Worl\nd!\n"
}
}
extension String {
init(charsPerLine:Int, _ str:String){
self = ""
var idx = 0
for char in str {
self += "\(char)"
idx = idx + 1
if idx == charsPerLine {
self += "\n"
idx = 0
}
}
}
}
Я пробовал несколько способов, но нашел еще лучшее решение: просто используйте элемент «Просмотр текста». Это текст показывает несколько строк автоматически! Найдено здесь: UITextField несколько строк