¿Cómo podría dividir una cadena en varias líneas como la siguiente?
var text:String = "This is some text
over multiple lines"
¿Cómo podría dividir una cadena en varias líneas como la siguiente?
var text:String = "This is some text
over multiple lines"
Respuestas:
Swift 4 incluye soporte para literales de cadena de varias líneas . Además de las nuevas líneas, también pueden contener citas 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"
\n
carácter. Por ejemplo, en REPL: println("foo\n" + "bar")
imprime foo
y bar
en líneas separadas.
Usé una extensión en String para lograr cadenas multilínea mientras evitaba el error de compilación. También le permite especificar un separador para que pueda usarlo un poco como la función de combinació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!"
enumerate(lines)
ahora eslines.enumerate()
joinWithSeparator
hace esencialmente lo mismo? ["Hello", "World!"].joinWithSeparator(", ")
Esta fue la primera cosa decepcionante sobre Swift que noté. Casi todos los lenguajes de secuencias de comandos permiten cadenas de varias líneas.
C ++ 11 agregó literales de cadena sin procesar que le permiten definir su propio terminador
C # tiene sus @literals para de varias líneas.
Incluso C simple y, por lo tanto, C ++ anticuado y Objective-C permiten la concatenación simplemente colocando múltiples literales adyacentes, por lo que las comillas se contraen. Los espacios en blanco no cuentan cuando lo hace, por lo que puede colocarlos en diferentes líneas (pero necesita agregar sus propias nuevas líneas):
const char* text = "This is some text\n"
"over multiple lines";
Como Swift no sabe que ha puesto su texto en varias líneas, tengo que arreglar la muestra de Connor, de manera similar a mi muestra C, indicando explícitamente la nueva línea:
var text:String = "This is some text \n" +
"over multiple lines"
Las cadenas de varias líneas son posibles a partir de Swift 4.0, pero hay algunas reglas:
"""
."""
también debe comenzar en su propia línea.Aparte de eso, ¡estás listo para irte! Aquí hay un ejemplo:
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!
"""
Vea las novedades en Swift 4 para obtener más información.
Como lo señaló litso, el uso repetido del +
operador -Operator en una expresión puede provocar que XCode Beta se cuelgue (solo se verificó con XCode 6 Beta 5): Xcode 6 Beta no se compila
Una alternativa para las cadenas multilínea por ahora es usar una matriz de cadenas y reduce
con +
:
var text = ["This is some text ",
"over multiple lines"].reduce("", +)
O, posiblemente más simple, usando join
:
var text = "".join(["This is some text ",
"over multiple lines"])
Swift 4 ha abordado este problema dando soporte literal de cadena de línea múltiple. Para comenzar el literal de cadena, agregue tres comillas dobles ("" ") y presione la tecla de retorno, después de presionar la tecla de retorno comience a escribir cadenas con cualquier variable, saltos de línea y comillas dobles solo como si escribieras en el bloc de notas o en cualquier editor de texto. Para finalizar el literal de cadena de varias líneas nuevamente, escriba (”” ”) en una nueva línea.
Ver abajo el ejemplo
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)
Rápido:
@connor es la respuesta correcta, pero si desea agregar líneas en una declaración impresa, lo que está buscando es \n
y / o \r
, estas se llaman Secuencias de escape o Caracteres escapados, este es un enlace a la documentación de Apple sobre el tema. .
Ejemplo:
print("First line\nSecond Line\rThirdLine...")
Agregando a la respuesta @Connor, también debe haber \ n. Aquí está el código revisado:
var text:String = "This is some text \n" +
"over multiple lines"
El siguiente ejemplo muestra una continuación de varias líneas, usando paréntesis como una solución simple para el error de Swift a partir de Xcode 6.2 Beta, donde se queja de que la expresión es demasiado compleja para resolverla en un tiempo razonable y considerar dividirla en una menor piezas:
.
.
.
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)
.
.
.
Muestra
var yourString = "first line \n second line \n third line"
En caso de que no encuentre el operador + adecuado
Un enfoque es establecer el texto de la etiqueta en atributeTexto y actualizar la variable de cadena para incluir el HTML para el salto de línea ( <br />
).
Por ejemplo:
var text:String = "This is some text<br />over multiple lines"
label.attributedText = text
Salida:
This is some text
over multiple lines
¡Espero que esto ayude!
String
valor (texto) a la NSAttributedString?
propiedad (label.attributedText).
Aquí hay un fragmento de código para dividir una cadena por n caracteres separados sobre líneas:
//: 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
}
}
}
}
Lo intenté de varias maneras, pero encontré una solución aún mejor: simplemente use el elemento "Vista de texto". ¡Su texto muestra múltiples líneas automáticamente! Encontrado aquí: UITextField líneas múltiples