ios - tumblr developers
Convertir Swift string a array (9)
Editar (Swift 4)
En Swift 4, no tiene que usar
characters
para usar
map()
.
Solo haz
map()
en String.
let letters = "ABC".map { String($0) }
print(letters) // ["A", "B", "C"]
print(type(of: letters)) // Array<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 función
map()
para la propiedad de
characters
.
let letters = "ABC".characters.map { String($0) }
print(letters) // ["A", "B", "C"]
Original (Swift 1.x)
La respuesta aceptada no parece ser la mejor, porque la secuencia convertida en
String
no es una
String
secuencia, sino un
Character
:
$ swift
Welcome to Swift! Type :help for assistance.
1> Array("ABC")
$R0: [Character] = 3 values {
[0] = "A"
[1] = "B"
[2] = "C"
}
Esto a continuación funciona para mí:
let str = "ABC"
let arr = map(str) { s -> String in String(s) }
La referencia para un
map()
función global
map()
está aquí:
http://swifter.natecook.com/func/map/
¿Cómo puedo convertir una cadena "Hola" en una matriz ["H", "e", "l", "l", "o"] en Swift?
En Objective-C he usado esto:
NSMutableArray *characters = [[NSMutableArray alloc] initWithCapacity:[myString length]];
for (int i=0; i < [myString length]; i++) {
NSString *ichar = [NSString stringWithFormat:@"%c", [myString characterAtIndex:i]];
[characters addObject:ichar];
}
En Swift 4, como
String
es una colección de
Character
, debes usar
map
let array1 = Array("hello") // Array<Character>
let array2 = Array("hello").map({ "/($0)" }) // Array<String>
let array3 = "hello".map(String.init) // Array<String>
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
-
Se puede crear una
Array
partir de unSequenceType
, y -
String
ajusta al protocoloSequenceType
, y su generador de secuencia enumera los caracteres.
Y dado que las cadenas Swift son totalmente compatibles con 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 a
SequenceType
, pero la propiedad de
characters
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 (nuevamente) una colección de sus
Character
:
let string = "Hello 🐶🐮 🇩🇪"
let characters = Array(string)
print(characters)
// ["H", "e", "l", "l", "o", " ", "🐶", "🐮", " ", "🇩🇪"]
La respuesta de Martin R es el mejor enfoque, y como él dijo, porque String conforma el protocolo SquenceType, también puede enumerar una cadena, obteniendo cada carácter en cada iteración.
let characters = "Hello"
var charactersArray: [Character] = []
for (index, character) in enumerate(characters) {
//do something with the character at index
charactersArray.append(character)
}
println(charactersArray)
También existe esta útil función en String: components (separados por: String)
let string = "1;2;3"
let array = string.components(separatedBy: ";")
print(array) // returns ["1", "2", "3"]
Funciona bien para manejar cadenas separadas por un carácter como ";" o incluso "/ n"
También puedes crear una extensión:
var strArray = "Hello, playground".Letterize()
extension String {
func Letterize() -> [String] {
return map(self) { String($0) }
}
}
Actualizado para Swift 4
Aquí hay 3 formas.
//array of Characters
let charArr1 = [Character](myString)
//array of String.element
let charArr2 = Array(myString)
for char in myString {
//char is of type Character
}
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:
//array of String
var strArr = myString.map { String($0)}
Swift 3
Aquí hay 3 formas.
let charArr1 = [Character](myString.characters)
let charArr2 = Array(myString.characters)
for char in myString.characters {
//char is of type Character
}
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:
var strArr = myString.characters.map { String($0)}
O puede agregar una extensión a String.
extension String {
func letterize() -> [Character] {
return Array(self.characters)
}
}
Entonces puedes llamarlo así:
let charArr = "Cat".letterize()
func letterize() -> [Character] {
return Array(self.characters)
}
let string = "hell0"
let ar = Array(string.characters)
print(ar)