¿Cómo escribir una cadena multilínea en Swift?

Resuelto Andrew Deniszczyc asked hace 10 años • 17 respuestas

¿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"
Andrew Deniszczyc avatar Jun 07 '14 04:06 Andrew Deniszczyc
Aceptado

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"
Connor Pearson avatar Jun 06 '2014 22:06 Connor Pearson

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!"
mcornell avatar Jul 28 '2014 20:07 mcornell

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"
Andy Dent avatar Jun 07 '2014 15:06 Andy Dent