developers ios arrays swift string

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 un SequenceType , y
  • String ajusta al protocolo SequenceType , 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)