Día 2
Estas son mis notas del curso del curso hackingwithswift
“when the going gets tough, everyone leaves.”
Lynch’s Law
«Cuando las cosas se ponen difíciles, todos se van.»
Lynch’s Law
Arrays
Matrizes
Los Arrays son una colección de valores que se guardan como si fueran uno.
Por ejemplo la Liga de la Justicia
let batman = "Bruno Días"
let superMan = "Clark Ken"
let wonderWoman = " Diana Prince"
let ligaDeLaJusticia = [batman, superMan, wonderWoman]
Un Array inicia y termina con corchetes « [ ]» , los elementos deben estar separados por comas, y para poder leer los elementos dentro del Array usamos el numero de elemento, comenzando la cuenta desde el cero, por ejemplo para acceder al primer elemento seria así
//Acceder a batman
ligaDeLaJusticia[0]
Si tratas de un leer un valor que no existe en el array por ejemplo ligaDeLaJusticia[3] Swift fallara
Si estas usando type annotations se especifican dentro de los corchetes por ejemplo
let númerosEnteros = [Int]
let númerosDecimales = [Double]
let nombres = [String]
Sets
Colecciones
Los Sets son colecciones de de valores igual que los Arrays. pero con dos diferencias, 1) los elementos no se guardan en ningún orden y 2) ningún elemento se puede repetir
Puedes crear un Set a partír de un Array así:
let colores = Set(["rojo","Azul", "Amarillo"])
Estos valores no se guardan en nigua orden y no puedes acceder a ellos como en un Array, y si tratas de agregar un valor duplicado este se ignorara
Tuples
Tuplas
Las Tuplas permiten guardar varios valores en forma de uno solo, son diferentes de los array en tres cosas 1) no puedes añadir o remover elementos, 2) no puedes cambiar el tipo de dato de los elementos dentro de ella, 3) puedes acceder a los elementos en su interior usando su posición numérica o el nombre, pero swift no te dejara leer números o nombres que no existen.
Ejemplo
var name = (first: "Taylor", last: "Swift")
Luego acceder a los valores por nombre o numero
//accedemos al mismo valor de dos formas diferentes
name.0
name.first
finalmente recuerda que puedes cambiar los valores dentro pero no su tipo de dato.
Arrays vs Sets vs Tuples
Si bien estos valores podrían parecer iguales tienen distintos usos
Para una colección de valores fijos donde cada elemento tiene una posición o valor único, usamos una Tupla («Tuple»)
Para un colección de valores que debe ser único o donde necesitas revisar rápido que el valor exista, usa un Colección («Set»)
y si necesitas una colección de valores que contenga valors duplicados y el orden importa debería usar una Matriz («Array»)
//Spoiler la mayoría de las veces sera un Array
Dictionaries
Los diccionarios son colecciones de datos igual que las matrices, pero a diferencia de las matrices en lugar de acceder a ellas por medio de su posición numérica, puedes acceder a ellas usando lo que quieras
Por ejemplo podemos usar un String para acceder a las profesiones de un grupo de amigos
var ocupaciones = [
"Misael" : "Programador",
"Armando": "Sistemas",
]
ocupaciones["Armando"] = "Soporte Tecnico"
print(ocupaciones["Armando"])
Cuando usamos type anotations podemos declarar el tipo usando dos puntos para separar, por ejemplo:
var diccionarioVacio = [String:Float]()
Dictionary default values
Valores por defecto para diccionarios
Si tratamos de acceder a un valor que no existe Swift nos regresara un valor «nil» o nulo; nada en absoluto
Pero podemos usar un valor por defecto o «default»
var ocupaciones = [
"Misael" : "Programador",
"Armando": "Sistemas",
]
//esta devuelve nil
print(ocupaciones["Luis"])
//esta devuelve un valor por default
print(ocupaciones["Luis"], default: "Desconocido")
Creando Colecciones vacías
Para crear una matriz vacía o un diccionario, usamos la sintaxis de iniciación
let arregloVacio = [String]()
let diccionarioVacio = [String:Float]()
Si el tipo de información puede ser inferida, se puede escribir de manera simplificada
var arregloVacio = [String]()
var diccionarioVacio = [String:Float]()
arregloVacio = []
diccionarioVacio = [:]
Esto es útil cuando queremos cambiar el valor o pasar un valor a una función.
Enums
Numeraciones
Sirven para agrupar valores relacionados de forma que son mas fáciles de usar por ejemplo
En lugar de tener :
let resultado = "Fallo"
let resultado2 = "Falla"
let resultado3 = "Fallido"
Esto genera diferentes valores que podrían tener diferentes significados así que los Enums nos ayudan a tener todo mas organizado por ejemplo
enum Resultado {
case éxito
case error
}
let resultado = Resultado.error
Con eso evitamos usar diferentes tipos cada vez y nuestro código gana coherencia por lo que es mas fácil de leer y mantener
Valores Asociados a los Enums
Ademas de simplemente guardar valores los Enums pueden tener valores asociados por ejemplo si tenemos un Enum con varias actividades
enum Actividades {
case aburrido
case corriendo
case conversando
case cantando
}
Imaginemos ahora que queremos especificar de que estamos hablando
enum Actividades {
case aburrido
case corriendo(destino: String)
case conversando(tema: String)
case cantando(volumen: Int)
}
let hablando = Actividades.hablando(tema: "Star Wars")
Resumen
«Arrays» ,«Sets» , «Tuples», y «Dictionaries» te permiten guardar grupos de elementos bajo un solo valor, de formas diferentes.
Los Arrays guardan valores en el orden que tu dispongas, se pueden repetir y acceder a ellos por su posición numérica
Los Sets guarda elementos sin ningún orden y no puedes acceder a ellos por su posición numérica
Las Tuples tienen un tamaño fijo, puedes añadir nombres a cada elemento, puedes leer elementos usando posiciones numéricas o los nombres.
Los Dictionaries guardan elementos de acuerdo a sus llaves y puedes leerlos de nuevo usando sus llaves
Los Enums son una forma de agrupar valores relacionados para que no te equivoques al escribirlos, por ejemplo para tipos de errores, adicionalmente puedes relacionarlos con otros valores.
//y bien ese fue el día 2, la verdad casi siempre se usan Arrays y Dictionaries es muy raro que se usen otros a excepción de los Enums que son muy utiles para hacer tu codigo mas legible
Referencias
Todas estas notas están basadas en el curso de hackingwithswift el cual te recomiendo tomar directo en su sitio web
Aqui los enlaces
https://www.hackingwithswift.com/100
https://www.hackingwithswift.com/100/2