Es aún más fácil en Swift:
let string : String = "Hello 🐶🐮 🇩🇪"
let characters = Array(string)
println(characters)
// [H, e, l, l, o, , 🐶, 🐮, , 🇩🇪]
Esto usa los hechos que
- una
Array
puede ser creado a partir de una SequenceType
, y
String
se ajusta al SequenceType
protocolo y su generador de secuencia enumera los caracteres.
Y dado que las cadenas Swift tienen soporte completo para Unicode, esto funciona incluso con caracteres fuera del "Plano multilingüe básico" (como 🐶) y con grupos de grafemas extendidos (como 🇩🇪, que en realidad está compuesto por dos escalares Unicode).
Actualización: a partir de Swift 2, String
ya no se ajusta
SequenceType
, pero la characters
propiedad proporciona una secuencia de los caracteres Unicode:
let string = "Hello 🐶🐮 🇩🇪"
let characters = Array(string.characters)
print(characters)
Esto también funciona en Swift 3 .
Actualización: a partir de Swift 4, String
es (de nuevo) una colección de sus
Character
s:
let string = "Hello 🐶🐮 🇩🇪"
let characters = Array(string)
print(characters)
// ["H", "e", "l", "l", "o", " ", "🐶", "🐮", " ", "🇩🇪"]
let joined = ", ".join(characters);
) la matriz da como resultado un'String' is not identical to 'Character'
error?", ".join(...)
espera una serie de cadenas. La respuesta de devxoul a continuación muestra cómo podría dividirse en una serie de cadenas.characters
es una colección y una vista de los caracteres de las cadenas. Crear una matriz a partir de los personajes hace una copia. - Por supuesto, puede acceder a los personajes directamente:for i in string.characters.indices { print(string.characters[i]) }
o simplementefor c in string.characters { print(c) }
Editar (Swift 4)
En Swift 4, no tiene que usar
characters
para usarmap()
. Solo hazlomap()
en String.O si prefiere más corto:
"ABC".map(String.init)
(2 bytes 😀)Editar (Swift 2 y Swift 3)
En Swift 2 y Swift 3, puede usar la
map()
función a lacharacters
propiedad.Original (Swift 1.x)
La respuesta aceptada no parece ser la mejor, porque la conversión de secuencia
String
no es unaString
secuencia, sino queCharacter
:Esto a continuación funciona para mí:
La referencia para una función global
map()
está aquí: http://swifter.natecook.com/func/map/fuente
arr = map(str) { String($0) }
Array
inicializador en su lugar:Array("ABC".characters)
"ABC".characters
yArray("ABC".characters)
."ABC".characters
devuelve un tipoString.CharacterView
. Para convertirlo en una matriz, específicamente de tipo,[Character]
tendría que usar elArray
inicializador.[String]
lugar de[Character]
porque op quería una matriz de cadenas :)También existe esta útil función en String: components (separados por: String)
Funciona bien para manejar cadenas separadas por un carácter como ";" o incluso "\ n"
fuente
Actualizado para Swift 4
Aquí hay 3 formas.
En algunos casos, lo que la gente realmente quiere es una forma de convertir una cadena en una serie de pequeñas cadenas con 1 longitud de caracteres cada una. Aquí hay una forma súper eficiente de hacer eso:
Swift 3
Aquí hay 3 formas.
En algunos casos, lo que la gente realmente quiere es una forma de convertir una cadena en una serie de pequeñas cadenas con 1 longitud de caracteres cada una. Aquí hay una forma súper eficiente de hacer eso:
O puede agregar una extensión a String.
Entonces puedes llamarlo así:
fuente
fuente
La respuesta de Martin R es el mejor enfoque, y como dijo, porque String cumple con el protocolo SquenceType, también puede enumerar una cadena, obteniendo cada carácter en cada iteración.
fuente
for character in characters { charactersArray.append(character)}
sin elenumeration()
En Swift 4, como
String
es una colección deCharacter
, debe usarmap
fuente
Una manera fácil de hacer esto es a
map
la variable y devolver cada unoCharacter
comoString
:La salida debería ser
["h", "e", "l", "l", "o"]
.fuente
También puedes crear una extensión:
fuente
fuente
para la función en Cadena: componentes (separados por: Cadena)
en Swift 5.1
cambiar a:
string.split(separator: "/")
fuente