Categories
Swift Development

100 Dias de Swift Día 8

Estas son mis notas para el curso de Swift https://www.hackingwithswift.com/100/8

Entrada anterior

“The programmer at wit’s end… can often do best by disentangling themself from their code, rearing back, and contemplating their data. Representation is the essence of programming.”

Fred Brooks

«El programador al final, hace mejor al distanciarse del código, leerlo otra vez, y contemplar su contenido. Representar es la esencia de programar.»

Fred Brooks

Structs part one

Creating your own structs

Las estructuras o «Structs» nos permiten crear nuestros propios tipos de datos, las structs pueden tener sus propias variables y funciones


struct Deporte {
    var nombre: String
}

var juegoConPelota = Deporte(nombre: "Baloncesto")
print(juegoConPelota)

ahora dado que tanto nuestro struct como su propiedad nombre son variables podemos modificarlas como cualquier variable

juegoConPelota.nombre = "Tenis"

print(juegoConPelota.nombre)

Las propiedades de una struct pueden tener valores por default y también funciona con la inferencia de tipo de valor.

Computed properties

Ahora que tenemos nuestra sctruct podemos añadir mas propiedades por ejemplo una propiedad calculada o «Computed propertie» que es básicamente lo que dice su nombre una propiedad que corre un pedazo de código para calcular su valor.

Aquí un ejemplo, añadimos dos propiedades mas a nuestra struct una un booleano y la otra una propiedad calculada.

struct Deporte {
    var nombre: String
    var esOlimpico: Bool
    var estatusOlimpico : String {
        if esOlimpico {
            return "\(nombre) es un deporte olimpico"
        } else {
            return "\(nombre) no es un deporte olimpico"
        }
    }
}

var juegoConPelota = Deporte(nombre: "Damas Chinas", esOlimpico: false)
print(juegoConPelota.estatusOlimpico )

Como vez las propiedades calculadas nos dan infinitas posibilidades.

Property observers

Podemos añadir observadores a nuestras variables para correr código antes o después de que cambien sus propiedades


struct Tarea {
    var nombre: String
    var avance: Int {
        didSet {
            print("\(nombre) esta ahora \(avance)% completada")
        }
    }
}

var lavarRopa = Tarea(nombre: "Lavar la ropa", avance: 10)

lavarRopa.avance = 30
lavarRopa.avance = 60
lavarRopa.avance = 100

También existe «willSet» que ejecuta código cuando el valor cambia, pero casi nadie lo usa.

Methods

Las structs pueden tener métodos dentro de ellas, y esas funciones pueden usar las propiedades de la struct si lo necesitan.

Las funciones dentro de una struct se llaman métodos o «Methods» pero aun usan la palabra reservada func

struct Ciudad {
    var poblacion: Int

    func recolectarImpuestos() -> Int {
        return poblacion * 1000
    }
}

let CDMX = Ciudad(poblacion: 1_000_000)
CDMX.recolectarImpuestos() 

Como el métodos pertenece a la estructura tenemos que llamarlo a partir de ella.

Mutating methods

Si una estructura tiene una variable, pero la instancia de la estructura fue creada como una constante esa propiedad no se puede cambiar, sin importar si tu propiedad es una variable.

El problema es que al crear una struct, swift no sabe si sera una variable o una constante, por eso swift no te deja crear métodos que modifiquen propiedades a menos que lo especifiques

Si quieres cambiar una propiedad debes usar «mutating» antes de func

struct Ciudad {
    var poblacion: Int

    func recolectarImpuestos() -> Int {
        return poblacion * 1000
    }
    
    mutating func cambiarPoblacion (nuevaPoblacion: Int) {
        poblacion = nuevaPoblacion
    }
}

var CDMX = Ciudad(poblacion: 1_000_000)
CDMX.cambiarPoblacion(nuevaPoblacion: 2_000_000)
print(CDMX.poblacion)

Swift solo dejara usar este método en instancias que sean variables.

Properties and methods of strings

Resulta que todo este tiempo que hemos estado usando Strings están son structs 🤯

Comencemos creando una nueva string

let yodaDice = "Do or do not, there is no try."

ahora podemos acceder a una de sus propiedad como count para saber cuantos caracteres tiene nuestra string

print(yodaDice.count)

Strings también tienen un método llamada «hasPrefix» que


print(yodaDice.hasPrefix("Do"))

Que regresa falso o verdadero si nuestra string inicia con esos caracteres.

Podemos también poner nuestra string en mayúsculas usando el método «uppercased()»

print(yodaDice.uppercased())

Hay muchos métodos mas que string tiene y que podemos descubrir con la auto compleción deXcode al escribir «.»

Properties and methods of arrays

Resulta que los arrays son también structs 😲 y tienen sus métodos también.

Aqui un par de ejemplos

//Array de ejemplo
var toys = ["Woody"]

//Contar elementos en el array 
print(toys.count)

//Añadir nuevo elemento a Array
toys.append("Buzz")

//Reordenar elementos del array alfabéticamente 
toys.firstIndex(of: "Buzz")
print(toys.sorted())

Initializers

Los Inicializadores son métodos especiales para te proveen diferentes maneras de crear tus structs, las structs vienen con un «Initializer» por defecto, que te pide que un valor por cada propiedad de tu struct

struct Usuario {
     var nombre: String
 }
var usuario = Usuario(nombre: "Juanito")

Podemos remplaza el incializador por default de la siguiente manera

struct Usuario {
     var nombre: String
    init() {
        nombre = "Anonimo"
        print("Usuario anonimux creado")
    }
 }

var usuario = Usuario()
usuario.nombre = "Juan"

El initializer no requiere que escribas func al principio pero debes asegurarte que todas las propiedades tengan un valor antes de que termine.


//y bueno esa fue la primera parte de Structs mañana seguimos con la segunda parte. 

Proximo día

Referencias

https://www.hackingwithswift.com/100/8

https://www.hackingwithswift.com/100

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *