Sé cómo hacerlo programáticamente, pero estoy seguro de que hay una forma integrada ...
Todos los idiomas que he usado tienen algún tipo de representación textual predeterminada para una colección de objetos que escupirá cuando intentes concatenar la matriz con una cadena, o pasarla a una función print (), etc. ¿El lenguaje Swift de Apple tenemos una forma integrada de convertir fácilmente una matriz en una cadena, o ¿siempre tenemos que ser explícitos al encadenar una matriz?
array.description
o si quieres un separador personalizadoarray.joined(separator: ",")
Respuestas:
Si la matriz contiene cadenas, puede usar el método
String
'sjoin
:En Swift 2 :
Esto puede ser útil si desea utilizar un separador específico (hypen, blank, coma, etc.).
De lo contrario, simplemente puede usar la
description
propiedad, que devuelve una representación de cadena de la matriz:Sugerencia: cualquier objeto que implemente el
Printable
protocolo tiene undescription
propiedad. Si adopta ese protocolo en sus propias clases / estructuras, también puede imprimirlasEn Swift 3
join
se conviertejoined
, ejemplo[nil, "1", "2"].flatMap({$0}).joined()
joinWithSeparator
se conviertejoined(separator:)
(solo disponible para Array of Strings)En Swift 4
fuente
"-".join(array)
ya no está disponible en Swift 2, Xcode 7 Beta 6, intente usararray.joinWithSeparator("-")
joinWithSeparator
solo está disponible para una variedad de cadenas. Si tiene una matriz de otros objetos, usemap
primero. Por ejemplo,[1, 2, 3].map({"\($0)"}).joinWithSeparator(",")
Con Swift 5, de acuerdo con sus necesidades, puede elegir uno de los siguientes códigos de muestra de Playground para resolver su problema.
Convirtiendo una matriz de
Character
s en unString
sin separador:Convirtiendo una matriz de
String
s en unString
sin separador:Convertir una matriz de
String
s en unString
con un separador entre palabras:Convertir una matriz de
String
s en unString
con un separador entre caracteres:Convirtiendo una matriz de
Float
s en unString
con un separador entre números:fuente
try JSONDecoder().decode([Int].self, from: Data(string.utf8))
Swift 2.0 Xcode 7.0 beta 6 utiliza
joinWithSeparator()
en adelante en lugar dejoin()
:joinWithSeparator
se define como una extensión enSequenceType
fuente
Swift 3
fuente
En Swift 4
fuente
Como nadie ha mencionado reducir, aquí está:
En el espíritu de la programación funcional 🤖
fuente
[0,1,1,0].map{"\($0)"}.reduce("",+)
. 😉[0,1,1,0].map(String.init).joined()
Para cambiar una matriz de cadenas opcionales / no opcionales
Aquí flatMap , compactMap omite los valores nulos en la matriz y agrega los otros valores para dar una cadena unida.
fuente
La mía funciona en NSMutableArray con componentsJoinedByString
fuente
En Swift 2.2 puede que tenga que convertir su matriz a NSArray para usar componentsJoinedByString (",")
fuente
Si desea deshacerse de cadenas vacías en la matriz.
Si también desea filtrar valores nulos:
fuente
El resultado será >>> Mani Singh iOS Developer
fuente
El equivalente rápido de lo que estás describiendo es la interpolación de cadenas. Si está pensando en cosas como JavaScript
"x" + array
, el equivalente en Swift es"x\(array)"
.Como nota general, existe una diferencia importante entre la interpolación de cadenas y el
Printable
protocolo. Solo ciertas clases se ajustan aPrintable
. Cada clase puede ser interpolada en cadena de alguna manera. Eso es útil al escribir funciones genéricas. No tienes que limitarte a lasPrintable
clases.fuente
Puede imprimir cualquier objeto usando la función de impresión
o usar
\(name)
para convertir cualquier objeto en una cadena.Ejemplo:
fuente
Crear extensión para un
Array
:fuente
Un separador puede ser una mala idea para algunos idiomas como el hebreo o el japonés. Prueba esto:
Para otros tipos de datos respectivamente:
fuente
si tiene una lista de matriz de cadenas, luego conviértala a Int
te dará un valor de cadena
fuente
para cualquier tipo de elemento
fuente
Prueba esto:
fuente
PARA SWIFT 3:
fuente
Si tiene alguna pregunta como esta: tobeFormattedString = ["a", "b", "c"] Salida = "abc"
String(tobeFormattedString)
fuente
String
no tiene inicializador capaz de hacer eso. O está utilizando una extensión personalizada o una biblioteca de terceros, o simplemente está equivocado.