¿Cómo escribir una cadena multilínea en Swift?
¿Cómo podría dividir una cadena en varias líneas como se muestra a continuación?
var text:String = "This is some text
over multiple lines"
Swift 4 incluye soporte para cadenas literales de varias líneas . Además de las nuevas líneas, también pueden contener comillas sin escape.
var text = """
This is some text
over multiple lines
"""
Las versiones anteriores de Swift no le permiten tener un solo literal en varias líneas, pero puede agregar literales en varias líneas:
var text = "This is some text\n"
+ "over multiple lines\n"
Utilicé una extensión en String para lograr cadenas de varias líneas y al mismo tiempo evitar el error del compilador. También le permite especificar un separador para que pueda usarlo un poco como la función de unión de 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!"
Esta fue la primera cosa decepcionante que noté sobre Swift. Casi todos los lenguajes de programación permiten cadenas de varias líneas.
C++ 11 agregó literales de cadena sin formato que le permiten definir su propio terminador
C# tiene sus @literals para cadenas de varias líneas.
Incluso el C simple y, por lo tanto, el C++ y el Objective-C anticuados permiten la concatenación simplemente colocando varios literales adyacentes, por lo que las comillas se contraen. Los espacios en blanco no cuentan cuando haces eso, por lo que puedes colocarlos en líneas diferentes (pero debes agregar tus propias líneas nuevas):
const char* text = "This is some text\n"
"over multiple lines";
Como Swift no sabe que ha colocado su texto en varias líneas, tengo que arreglar la muestra de Connor, de manera similar a mi muestra de C, indicando explícitamente la nueva línea:
var text:String = "This is some text \n" +
"over multiple lines"