BLACK FRIDAY: Save 50% on all my 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"]
Save 50% in my WWDC sale.

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.

Save 50% on all our books and bundles!

BUY OUR BOOKS
Buy Pro Swift Buy Pro SwiftUI 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 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 Beyond Code

Was this page useful? Let us know!

Average rating: 5.0/5

 
Unknown user

You are not logged in

Log in or create account
 

Link copied to your pasteboard.