Як я можу розділити рядок на кілька рядків, таких як нижче?
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(", ")
Це було перше невтішне про Свіфта, яке я помітив. Практично всі мови сценаріїв дозволяють створювати багаторядкові рядки.
C ++ 11 додав необроблені рядкові літерали, які дозволяють визначити власний термінатор
У C # є @literals для багаторядкових рядків.
Навіть звичайний C, а отже, старомодний C ++ і Objective-C, дозволяють досягти стимуляції, просто поставивши декілька суміжних літералів поруч, тому лапки згортаються. Пробіл не враховується, коли ви це зробите, щоб ви могли розміщувати їх у різних рядках (але потрібно додати власні нові рядки):
const char* text = "This is some text\n"
"over multiple lines";
Оскільки швидкий не знає, що ви розмістили текст у декількох рядках, я повинен виправити зразок коннора, аналогічно моєму зразку 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 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 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)
Швидкий:
@connor - це правильна відповідь, але якщо ви хочете додати рядки у друкованому виписці, те, що ви шукаєте, є \n
та / або \r
, це називається Escape Sequences або Escaped Characters, це посилання на документацію Apple з цієї теми. .
Приклад:
print("First line\nSecond Line\rThirdLine...")
Додавши до @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)
.
.
.
Зразок
var yourString = "first line \n second line \n third line"
У разі якщо ви не вважаєте + оператора підходящим
Один із підходів полягає у встановленні тексту мітки на attributedText та оновлення змінної рядка для включення 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