O problema com essa abordagem é que você pode facilmente acessar muitas linhas 'contínuas' no Swift (a partir do Xcode 6.2 beta), onde reclama que a expressão é "complexa demais para ser resolvida em um período de tempo razoável" e considerar a possibilidade de quebrar até expressões mais simples. Isso é feio, mas fácil o suficiente, basta envolver as seções em parênteses.
clearlight
8
Não se esqueça de adicionar um espaço entre a citação de fechamento e o +, caso contrário, você receberá um erro "'+' não é um operador unificado pós-fixado"
Orlin Georgiev
Isso ainda funciona, mas você precisa adicionar manualmente o \npersonagem. Por exemplo, no REPL: println("foo\n" + "bar")imprime fooe barem linhas separadas.
9789 Brian Gerstle às
Ele deve ser corrigido no Xcode 7 "Concatenação de literais de cadeia Swift, incluindo várias linhas, é uma otimização garantida em tempo de compilação, mesmo em -Onone.", Adcdownload.apple.com/WWDC_2015/Xcode_7_beta/…
Kostiantyn Koval
2
Não funciona para valores de maiúsculas e minúsculas que usam seqüências de caracteres :(
Lars Blumberg
32
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
Esses métodos são perfeitos. Mesmo na versão mais recente do 1.2 Swift, literais longos são compilados muito lentamente, e esses métodos evitam essa sobrecarga.
Phatmann
2
Para quem usa o Swift 2, enumerate(lines)agora élines.enumerate()
Jedidja 30/09
2
@mcornell Isso é legal, mas não joinWithSeparatorfaz essencialmente a mesma coisa? ["Hello", "World!"].joinWithSeparator(", ")
Dan Loewenherz
27
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 # 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"
Tenho certeza de que existem limitações nisso. Tentei dividir uma string por 13 linhas (é um texto informativo com várias linhas). Não só não conseguiu terminar de compilar, mas também deixou meu Mac de joelhos. Como eu disse, não posso categoricamente dizer que isso é um problema, mas cuidado, o impacto é muito ruim.
Derek Cavaleiro
Eu bati várias vezes antes mesmo de compilar. Eu acho que o processo "SourceKitService", que é responsável pelo destaque da sintaxe e pela conclusão do código (suponho), também é responsável por essas falhas.
Paul Brewczynski
@DerekKnight Isso é um bug do compilador, não uma limitação de idioma. Se ainda persistir, você deve enviar um radar.
Radex
@bluesm FYI: O SourceKit é um processo separado, portanto não pode travar o Xcode. Ele faz destaque de sintaxe e conclusão de código, correto, mas, no momento, a própria compilação vive em processo de Xcode - é por isso que um erro do compilador leva para baixo Xcode com ele mesmo, por vezes :(
RADEX
17
Cadeias de linhas múltiplas são possíveis a partir do Swift 4.0, mas existem algumas regras:
Você precisa iniciar e terminar suas strings com três aspas duplas """,.
O conteúdo da string deve começar em sua própria linha.
A terminação """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!
"""
Infelizmente, isso não funciona no Xcode 8.3.3 Playground. Eu recebo um erro "string não terminada".
James Foster
Como eu disse, esse recurso é novo no Swift 4 - instale um Swift 4 toolchain em Xcode 8.3.3 ou instalar Xcode 9.
TwoStraws
16
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 reducecom +:
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"])
A versão reduzida funcionou para mim no beta 6, mas a junção lançou uma exceção.
Tristan Warner-Smith
9
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)
@connor é a resposta certa, mas se você deseja adicionar linhas em uma declaração impressa, o que você está procurando é \ne / ou \ré chamado Sequências de escape ou Caracteres escapados, este é um link para a documentação da Apple sobre o assunto. .
Não é isso que alguém quer. Queremos poder ter quebra de linha no código-fonte para os literais de string, não (necessariamente) ter quebras de linha na saída renderizada . Isso ficou bem claro na pergunta original, eu acho. Pessoas com resultados positivos obviamente entenderam. Pessoas com resultados negativos obviamente não o fizeram.
ArtOfWarfare
5
@ArtOfWarfare, esta é a resposta que eu estava procurando e esta página foi o resultado principal ao fazer uma pesquisa por "nova linha de seqüência rápida". Obviamente, não é tão óbvio como você diz.
John R Perry
4
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:
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
(só para você saber, os votos negativos são provavelmente porque a pergunta era sobre formatação de código, não na interface do usuário… e fornecer um exemplo de código em sua resposta provavelmente tornaria isso mais aparente)
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.
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:
fonte
\n
personagem. Por exemplo, no REPL:println("foo\n" + "bar")
imprimefoo
ebar
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
fonte
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):
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:
fonte
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:
Veja o que há de novo no Swift 4 para obter mais informações.
fonte
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 compilandoUma alternativa para cadeias de linhas múltiplas por enquanto é usar uma matriz de cadeias e
reduce
com+
:Ou, sem dúvida mais simples, usando
join
:fonte
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
fonte
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:
fonte
Adicionando à resposta @Connor, também precisa haver \ n. Aqui está o código revisado:
fonte
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:
fonte
Outra maneira, se você quiser usar uma variável de string com algum texto predefinido,
fonte
Você pode usar iguais unicode para inserir ou
\n
implementá-los dentro de sua string. Por exemplo:\u{0085}
.fonte
Amostra
Caso não encontre o operador + adequado
fonte
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:
Resultado:
Espero que isto ajude!
fonte
String
valor (texto) àNSAttributedString?
propriedade (label.attributedText).Aqui está um trecho de código para dividir uma string por n caracteres separados por linhas:
fonte
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
fonte