Variables estáticas en clases, estructuras y enumerados

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

Resumen

¿Cómo manejar propiedades estáticas en Swift?

En Swift, las propiedades estáticas tienen un rol crucial cuando queremos compartir información entre todas las instancias de una clase, estructura o enumerado. A diferencia de las propiedades computadas regulares, estas son comunes a todos los objetos originados a partir de un mismo tipo de dato. Conociendo el concepto y el uso de la palabra reservada static, podemos administrar mejor los recursos y optimizar nuestro código.

¿Qué son las propiedades estáticas y cómo se declaran?

Las propiedades estáticas representan variables que son universales para todas las instancias de un tipo de dato determinado. Esto significa que, aunque haya múltiples instancias, solo existirá una única versión de esa propiedad. Para declararlas, utilizamos la palabra clave static.

struct EjemploStruct {
    static var propiedadComun: String = "Valor compartido"
    
    static var propiedadComputada: Int {
        return 42
    }
}

En el ejemplo anterior, propiedadComun y propiedadComputada pertenecen a EjemploStruct y todos los objetos derivados de esta estructura accederán al mismo valor.

¿Cómo se accede a las propiedades estáticas?

El acceso a estas propiedades no se hace a través de una instancia, sino que se realiza mediante la estructura, clase o enumerado directamente.

print(EjemploStruct.propiedadComun) // Imprime "Valor compartido"
print(EjemploStruct.propiedadComputada) // Imprime 42

¿Existen diferencias al trabajar con class en lugar de static?

En clases, el uso de class en lugar de static permite que las subclases sobrescriban las propiedades computadas. Esto proporciona flexibilidad para que cada subclase pueda definir su propio comportamiento sobre esas propiedades.

class EjemploClase {
    class var propiedadComputada: Int {
        return 100
    }
}

class SubClase: EjemploClase {
    override class var propiedadComputada: Int {
        return 200
    }
}

print(EjemploClase.propiedadComputada) // Imprime 100
print(SubClase.propiedadComputada) // Imprime 200

¿Qué aplicaciones prácticas tienen las propiedades estáticas?

Las propiedades estáticas son ideales cuando necesitas una variable que todos puedan compartir y acceder sin crear instancias adicionales. Algunos ejemplos incluyen:

  • Contadores globales: para rastrear el número total de instancias creadas.
  • Constantes universales: como el número pi, útiles en cálculos distribuidos.
  • Datos compartidos: como un presupuesto familiar donde todos los miembros puedan descontar o sumar fondos.

Una buena práctica es implementar conceptos como un presupuesto compartido en una clase o estructura, tal y como lo harías si varios miembros de una familia debieran colaborar con un recurso común.

Implementación práctica

Aquí tienes un ejemplo práctico que implementa un presupuesto compartido entre instancias:

class Familia {
    static var presupuesto: Double = 1000.0 // Presupuesto compartido
    
    func gastar(dinero: Double) {
        Familia.presupuesto -= dinero
    }
    
    func agregarFondos(dinero: Double) {
        Familia.presupuesto += dinero
    }
}

let miembro1 = Familia()
let miembro2 = Familia()

miembro1.gastar(dinero: 150.0)
print(Familia.presupuesto) // Imprime 850.0

miembro2.agregarFondos(dinero: 200.0)
print(Familia.presupuesto) // Imprime 1050.0

Este enfoque permite que cada miembro de Familia opere sobre el presupuesto compartido, mostrando cómo cada cambio afecta inmediatamente al total disponible.

Experimenta con tus propias clases y estructuras para comprender mejor las propiedades estáticas y cómo pueden ayudarte a optimizar y compartir recursos dentro de tu código. A través de estos conceptos, dominarás la gestión de variables comunes entre instancias y podrás aplicar mejor las propiedades estáticas o computadas en tus proyectos. ¡Sigue aprendiendo y compartiendo en el foro tus experiencias!