Implementación de Observers en Propiedades de Clases en Swift

Clase 9 de 27Curso de Programación Orientada a Objetos en Swift

Resumen

¿Qué es un Observer en programación?

El uso de Observers en programación es clave para gestionar variables y constantes dentro de clases o estructuras. Cuando una propiedad es observada, se busca reaccionar ante cualquier cambio. Un caso práctico es en videojuegos con la propiedad de vida de un personaje—si baja de cero, sería necesario activar un "game over". Los Observers nos permiten supervisar cambios en esas propiedades.

¿Qué tipos de Observer existen en Swift?

Swift ofrece dos principales tipos de Observers que se pueden usar en propiedades: willSet y didSet.

  • willSet: Se ejecuta justo antes de que el valor de la propiedad cambie. Es ideal para anticipar acciones antes de que el nuevo valor se configure.

  • didSet: Se ejecuta después de que el nuevo valor ha sido establecido. Permite realizar acciones basadas en el cambio concreto que ha ocurrido.

¿Cómo funciona un Observer en un podómetro?

Para entender su funcionamiento, veamos el ejemplo de un podómetro que cuenta los pasos que una persona da:

class StepCounter {
    var totalSteps: Int = 0 {
        willSet(newTotalSteps) {
            print("El número de pasos va a subir hasta \(newTotalSteps)")
        }
        didSet {
            if totalSteps > oldValue {
                print("El número de pasos ha incrementado en \(totalSteps - oldValue)")
            }
        }
    }
}

// Uso del StepCounter
let stepCounter = StepCounter()
stepCounter.totalSteps = 200
stepCounter.totalSteps = 520
stepCounter.totalSteps = 1234

Este código configura un podómetro que, cada vez que se actualizan los pasos totales, imprime mensajes antes y después del cambio, gracias a willSet y didSet.

¿Cómo implementar Observers para gestionar la vida de un jugador?

Una tarea interesante es crear una clase que maneje la vida de un jugador en un rango entre 0 y 100 usando Observers. Aquí algunos consejos para abordar esto:

  • Implementa willSet para corregir el valor si se pasa de 100, asegurando que no exceda ese rango.
  • Usa didSet para detectar cuando la vida alcanza cero y disparar un mensaje de "game over".

Esta implementación sería útil para mantener el control sobre la vitalidad del personaje en cualquier momento del juego, garantizando que se respetan los límites y se generan respuestas adecuadas ante el cambio en el juego.

Anímate a implementar esto y comparte tus avances en el foro del curso. ¡A seguir aprendiendo y programando!