NEW: Get your ticket for Hacking with Swift Live 2019! >>

< Previous: Interpolación de cadenas de carácteres   Next: Diccionarios >

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

HACKING WITH SWIFT LIVE This July is a new two-day event where you'll be inspired by great speakers on day one then learn all the amazing new features from WWDC on day two – click here for more information and tickets.

< Previous: Interpolación de cadenas de carácteres   Next: Diccionarios >
MASTER SWIFT NOW
Buy Testing Swift Buy Practical iOS 12 Buy Pro Swift Buy Swift Design Patterns Buy Swift Coding Challenges Buy Server-Side Swift (Vapor Edition) Buy Server-Side Swift (Kitura Edition) Buy Hacking with macOS Buy Advanced iOS Volume One Buy Advanced iOS Volume Two Buy Hacking with watchOS Buy Hacking with tvOS Buy Hacking with Swift Buy Dive Into SpriteKit Buy Swift in Sixty Seconds Buy Objective-C for Swift Developers Buy Beyond Code

Was this page useful? Let me know!

Click here to visit the Hacking with Swift store >>