Como eu poderia dividir uma string em várias linhas, como abaixo?
var text:String = "This is some text
over multiple lines"
Como eu poderia dividir uma string em várias linhas, como abaixo?
var text:String = "This is some text
over multiple lines"
Respostas:
O Swift 4 inclui suporte para literais de strings de várias linhas . Além das novas linhas, elas também podem conter aspas sem escape.
var text = """
This is some text
over multiple lines
"""
As versões anteriores do Swift não permitem que você tenha um único literal em várias linhas, mas você pode adicionar literais em várias linhas:
var text = "This is some text\n"
+ "over multiple lines\n"
\n
personagem. Por exemplo, no REPL: println("foo\n" + "bar")
imprime foo
e bar
em linhas separadas.
Eu usei uma extensão no String para obter seqüências de múltiplas linhas, evitando o bug de suspensão do compilador. Também permite especificar um separador para que você possa usá-lo um pouco como a função de junção do 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)
agora élines.enumerate()
joinWithSeparator
faz essencialmente a mesma coisa? ["Hello", "World!"].joinWithSeparator(", ")
Esta foi a primeira coisa decepcionante sobre Swift que eu notei. Quase todas as linguagens de script permitem seqüências de várias linhas.
O C ++ 11 adicionou literais de cadeia bruta que permitem definir seu próprio terminador
O C # tem seus @ literais para seqüências de caracteres de várias linhas.
Mesmo C simples e, portanto, C ++ e Objective-C antiquados permitem concatentação simplesmente colocando vários literais adjacentes, para que as aspas sejam recolhidas. O espaço em branco não conta quando você faz isso, para poder colocá-los em linhas diferentes (mas precisa adicionar suas próprias novas linhas):
const char* text = "This is some text\n"
"over multiple lines";
Como o swift não sabe que você colocou seu texto em várias linhas, eu tenho que corrigir a amostra de connor, da mesma forma que a minha amostra C, declarando explicitamente a nova linha:
var text:String = "This is some text \n" +
"over multiple lines"
Cadeias de linhas múltiplas são possíveis a partir do Swift 4.0, mas existem algumas regras:
"""
,."""
também deve começar em sua própria linha.Fora isso, você está pronto para ir! Aqui está um exemplo:
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!
"""
Veja o que há de novo no Swift 4 para obter mais informações.
Conforme apontado por litso, o uso repetido do +
-Operator em uma expressão pode levar à suspensão do XCode Beta (apenas verificado com o XCode 6 Beta 5): Xcode 6 Beta não compilando
Uma alternativa para cadeias de linhas múltiplas por enquanto é usar uma matriz de cadeias e reduce
com +
:
var text = ["This is some text ",
"over multiple lines"].reduce("", +)
Ou, sem dúvida mais simples, usando join
:
var text = "".join(["This is some text ",
"over multiple lines"])
O Swift 4 resolveu esse problema, oferecendo suporte literal para várias linhas. Para iniciar o literal de cadeia, adicione três aspas duplas (”” ”) e pressione a tecla Enter. Depois de pressionar a tecla Enter, comece a escrever strings com quaisquer variáveis, quebras de linha e aspas duplas. como você escreveria no bloco de notas ou em qualquer editor de texto. Para finalizar literalmente a sequência de várias linhas, escreva (”” ”) na nova linha.
Veja abaixo o exemplo
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 é a resposta certa, mas se você deseja adicionar linhas em uma declaração impressa, o que você está procurando é \n
e / ou \r
é chamado Sequências de escape ou Caracteres escapados, este é um link para a documentação da Apple sobre o assunto. .
Exemplo:
print("First line\nSecond Line\rThirdLine...")
Adicionando à resposta @Connor, também precisa haver \ n. Aqui está o código revisado:
var text:String = "This is some text \n" +
"over multiple lines"
O exemplo a seguir mostra uma continuação de várias linhas, usando parênteses como uma solução alternativa simples para o bug Swift a partir do Xcode 6.2 Beta, em que reclama que a expressão é complexa demais para ser resolvida em um período de tempo razoável e considerar a decomposição em menor peças:
.
.
.
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)
.
.
.
Amostra
var yourString = "first line \n second line \n third line"
Caso não encontre o operador + adequado
Uma abordagem é definir o texto do rótulo como attributeText e atualizar a variável de sequência para incluir o HTML para quebra de linha ( <br />
).
Por exemplo:
var text:String = "This is some text<br />over multiple lines"
label.attributedText = text
Resultado:
This is some text
over multiple lines
Espero que isto ajude!
String
valor (texto) à NSAttributedString?
propriedade (label.attributedText).
Aqui está um trecho de código para dividir uma string por n caracteres separados por linhas:
//: 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
}
}
}
}
Tentei de várias maneiras, mas encontrei uma solução ainda melhor: basta usar o elemento "Visualização de texto". Seu texto mostra várias linhas automaticamente! Encontrado aqui: UITextField várias linhas