SALE ENDS TODAY: Save 50% on all Swift books and bundles! >>

Arreglos

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]

Creando los arreglos

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!

Operaciones de arreglos

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"]

SPONSORED Instabug helps you identify and resolve severe crashes quickly. You can retrace in-app events and know exactly which line of code caused the crash along with environment details, network logs, repro steps, and the session profiler. Ask more questions or keep users up-to-date with in-app replies straight from your dashboard. Instabug takes data privacy seriously, so no one sees your data but you! See more detailed features comparison and try Instabug's crash reporting SDK for free.

Save 50% on all books and bundles

The biggest ever Hacking with Swift sale is now on, letting you save 50% on all books and bundles. Learn something new with Swift and enjoy great savings while the sale lasts!

Click here to save 50% in our Black Friday sale!

BUY OUR BOOKS
Buy Pro Swift Buy Swift Design Patterns Buy Testing Swift Buy Hacking with iOS Buy Swift Coding Challenges Buy Swift on Sundays Volume One Buy Server-Side Swift (Vapor Edition) Buy Advanced iOS Volume One Buy Advanced iOS Volume Two Buy Advanced iOS Volume Three Buy Hacking with watchOS Buy Hacking with tvOS Buy Hacking with macOS Buy Dive Into SpriteKit Buy Swift in Sixty Seconds Buy Objective-C for Swift Developers Buy Server-Side Swift (Kitura Edition) Buy Beyond Code

Was this page useful? Let us know!