Eu sei como fazê-lo programaticamente, mas tenho certeza de que há uma maneira integrada ...
Todo idioma que eu usei tem algum tipo de representação textual padrão para uma coleção de objetos que ele cuspirá quando você tentar concatenar o Array com uma string ou passá-lo para uma função print () etc. O idioma Swift da Apple tem uma maneira interna de transformar facilmente uma matriz em uma string ou sempre precisamos ser explícitos ao stringing uma matriz?
array.description
ou se você quiser um separador personalizadoarray.joined(separator: ",")
Respostas:
Se a matriz contiver seqüências de caracteres, você poderá usar o método
String
'sjoin
:No Swift 2 :
Isso pode ser útil se você quiser usar um separador específico (hifen, espaço em branco, vírgula etc.).
Caso contrário, você pode simplesmente usar a
description
propriedade, que retorna uma representação de string da matriz:Dica: qualquer objeto que implemente o
Printable
protocolo possui umadescription
propriedade. Se você adotar esse protocolo em suas próprias classes / estruturas, também as tornará amigáveis à impressãoEm Swift 3
join
torna-sejoined
, exemplo[nil, "1", "2"].flatMap({$0}).joined()
joinWithSeparator
torna-sejoined(separator:)
(disponível apenas para Array of Strings)Em Swift 4
fonte
"-".join(array)
não está mais disponível no Swift 2, Xcode 7 Beta 6, tente usararray.joinWithSeparator("-")
joinWithSeparator
está disponível apenas para matriz de seqüências de caracteres. Se você tiver diversos outros objetos, usemap
primeiro. Por exemplo,[1, 2, 3].map({"\($0)"}).joinWithSeparator(",")
Com o Swift 5, de acordo com suas necessidades, você pode escolher um dos seguintes códigos de amostra do Playground para resolver seu problema.
Transformando uma matriz de
Character
s em umaString
sem separador:Transformando uma matriz de
String
s em umaString
sem separador:Transformando uma matriz de
String
s em aString
com um separador entre palavras:Transformando uma matriz de
String
s em umString
com um separador entre caracteres:Transformando uma matriz de
Float
s em aString
com um separador entre números:fonte
try JSONDecoder().decode([Int].self, from: Data(string.utf8))
O Swift 2.0 Xcode 7.0 beta 6 em diante usa em
joinWithSeparator()
vez dejoin()
:joinWithSeparator
é definido como uma extensão emSequenceType
fonte
Swift 3
fonte
Em Swift 4
fonte
Como ninguém mencionou reduzir, aqui está:
No espírito da programação funcional 🤖
fonte
[0,1,1,0].map{"\($0)"}.reduce("",+)
. X[0,1,1,0].map(String.init).joined()
Para alterar uma matriz de cadeias opcionais / não opcionais
Aqui flatMap , compactMap ignora os valores nulos na matriz e acrescenta os outros valores para fornecer uma sequência de caracteres unida.
fonte
O meu funciona no NSMutableArray com componentesJoinedByString
fonte
No Swift 2.2, pode ser necessário converter sua matriz no NSArray para usar componentsJoinedByString (",")
fonte
Se você deseja descartar cadeias vazias na matriz.
Se você deseja filtrar valores nulos também:
fonte
O resultado será >>> Mani Singh iOS Developer
fonte
O equivalente Swift ao que você está descrevendo é a interpolação de strings. Se você está pensando em coisas como JavaScript
"x" + array
, o equivalente no Swift é"x\(array)"
.Como uma observação geral, há uma diferença importante entre a interpolação de strings e o
Printable
protocolo. Somente determinadas classes estão em conformidadePrintable
. Toda classe pode ser interpolada de alguma forma. Isso é útil ao escrever funções genéricas. Você não precisa se limitar àsPrintable
aulas.fonte
Você pode imprimir qualquer objeto usando a função de impressão
ou use
\(name)
para converter qualquer objeto em uma string.Exemplo:
fonte
Crie uma extensão para
Array
:fonte
Um separador pode ser uma má ideia para alguns idiomas, como hebraico ou japonês. Tente o seguinte:
Para outros tipos de dados, respectivamente:
fonte
se você tiver uma lista de matrizes de string, converta para Int
isso lhe dará um valor de string
fonte
para qualquer tipo de elemento
fonte
Tente isto:
fonte
PARA SWIFT 3:
fonte
Se você pergunta é algo como isto: tobeFormattedString = ["a", "b", "c"] Output = "abc"
String(tobeFormattedString)
fonte
String
não tem inicializador capaz de fazer isso. Você está usando uma extensão personalizada ou uma biblioteca de terceiros ou simplesmente está enganado.