Los arreglos permiten agrupar muchos valores en una colección simple, para después acceder a estos utilizando su posición dentro de la colección. Swift usa inferencia de tipo para saber qué tipo de datos los contiene el arreglo, como así:
var evenNumbers = [2, 4, 6, 8]
var songs = ["Shake it Off", "You Belong with Me", "Back to December"]
Como puedes ver, Swift usa corchetes para indicar el comienzo y el fin de un arreglo, y cada elemento en el arreglo se separa con una coma.
Cuando se trata de leer elementos fuera de un arreglo, hay una excepción: Swift empieza a contar en 0. Esto significa que el primer elemento es 0, el segundo elemento es 1, el tercer elemento es 2, y así. Trata de poner esto en tu playground:
var songs = ["Shake it Off", "You Belong with Me", "Back to December"]
songs[0]
songs[1]
songs[2]
Eso mostrará "Shake it Off", "You Belong with Me", y "Back to December" en el panel de resultados.
La posición de un elemento del arreglo se llama índice, y puedes leer cualquier elemento del arreglo utilizándolo. Sin embargo, ten cuidado: nuestro arreglo contiene tres elementos, que significa los índices 0, 1, y 2 funcionan excelentes. Pero, si tratas de leer songs[3]
, su playground no funcionará - ¡y si haces eso en una aplicación real va a fallar!
Ya que has creado el arreglo utilizando 3 cadenas de caracteres (Strings), Swift entiende que esto es un arreglo de cadenas de caracteres. Puedes confirmar esto utilizando el comando que, en el playground, muéstrate el tipo de datos de un variable, de esta forma:
var songs = ["Shake it Off", "You Belong with Me", "Back to December"]
type(of: songs)
Eso mostrará Array<String>.Type
en el panel de resultados, diciendo que Swift se considera songs
ser un arreglo de cadenas de caracteres.
Digamos que cometes un error y, de forma accidental, insertas un número al final del arreglo. Escribe lo siguiente y observa lo que muestra el panel de resultados:
var songs = ["Shake it Off", "You Belong with Me", "Back to December", 3]
type(of: songs)
En este momento, verás un error. Este error no es causado porque Swift no puede manejar arreglos mezclados como este - ¡Te voy a enseñar esto en un momento! - más bien es porque Swift está ayudándonos. El mensaje del error que verás es, "heterogenous collection literal could only be inferred to '[Any]'; add explicit type annotation if this is intentional." Lo que quiere decir Swift es "Parece que este arreglo está diseñado para almacenar muchos tipos de datos - si realmente significa eso, por favor déjalo explícito."
Type safety es importante, y aunque es genial que Swift puedes iniciar arreglos que contienen cualquier tipo de dato, este caso en particular fue un accidente. Afortunadamente, he dicho antes que puedes usar especificación de tipo para decir exactamente que tipo de dato quieres almacenar en el arreglo. Utilizando corchetes se refiere a que en algún momento habrá un arreglo, y en este caso el arrelgo almacenará cadenas de caracteres:
var songs: [String] = ["Shake it Off", "You Belong with Me", "Back to December", 3]
Ahora que hemos dicho a Swift que queremos poner solamente cadenas de caracteres en el arreglo, siempre va a negarse de ejecutar el código a causa de que 3 no es una cadena de caracteres.
Si realmente querías que el arreglo pueda almacenar cualquier tipo de dato, utiliza el tipo de dato especial Any así:
var songs: [Any] = ["Shake it Off", "You Belong with Me", "Back to December", 3]
Si declaras un arreglo de la forma mostrada arriba, Swift creará el arreglo y almacenará los valores que hemos especificado. Las cosas no son tan simples si queremos crear un arreglo para llenarlo luego - este sintaxis no funciona:
var songs: [String]
songs[0] = "Shake it Off"
Al principio, la razón es algo que aparece un poco quisquillosa o pedante, pero tiene implicaciones importantes en la ejecución de la aplicación, pues lo siento pero tienes que vivir con ello. Mejor dicho, cuando escribe var songs: [String]
está diciendo a Swift "el variable songs
va a contener un arreglo de cadena de caracteres," pero esto no crea el arreglo. Esto no lo asigna a ninguna dirección de memoria (o reserva RAM), ni hace cualquier trabajo para iniciar o crear un arreglo de Swift.
Hay pocas maneras de expresar esto correctamente, y la que tiene más sentido por ahora es esta:
var songs: [String] = []
Eso tiene una anotación de tipo para clarificar que queremos un arreglo de cadenas de caracteres, y lo asigna a un arreglo vacío (eso es el []
parte).
También verás frecuentemente este constructor:
var songs = [String]()
Eso significa lo mismo que la otra forma: el ()
dice a Swift que queremos iniciar un arreglo y asignarlo a songs
gracias a la inferencia de tipo. ¡Este opción tiene dos caracteres menos, así que no es una sorpresa que lo prefieran muchos programadores!
Puedes utilizar un conjunto limitado de operadores sobre los arreglos. Por ejemplo, puedes combinar dos arreglos utilizando el operador +
, así:
var songs = ["Shake it Off", "You Belong with Me", "Love Story"]
var songs2 = ["Today was a Fairytale", "Welcome to New York", "Fifteen"]
var both = songs + songs2
También puedes usar +=
para añadir y asignar, así:
both += ["Everything has Changed"]
SAVE 50% All our books and bundles are half price for Black Friday, so you can take your Swift knowledge further without spending big! Get the Swift Power Pack to build your iOS career faster, get the Swift Platform Pack to builds apps for macOS, watchOS, and beyond, or get the Swift Plus Pack to learn advanced design patterns, testing skills, and more.
Link copied to your pasteboard.