Sobes.tech
Junior

¿Qué significa si se establece un setter para una variable?

sobes.tech AI

Respuesta de la IA

Un setter (establecedor) es un método que permite controlar la asignación de un nuevo valor a una variable. Al establecer un setter, el mecanismo estándar de asignación de valores por defecto se reemplaza por un código dentro del setter. Esto permite:

  • Validar los datos de entrada: Verificar si el nuevo valor cumple con las condiciones establecidas antes de asignarlo a la variable.
    var age: Int = 0 {
        didSet { // El setter (didSet) se llama después de asignar el valor
            if age < 0 {
                age = 0 // No permitimos asignar un valor negativo
            }
        }
    }
    
  • Realizar acciones adicionales: Ejecutar otro código al cambiar el valor de la variable, por ejemplo, actualizar la interfaz de usuario o notificar a otras partes de la aplicación.
    var score: Int = 0 {
        didSet { // El setter (didSet)
            print("Puntuación actualizada a \(score)") // Registramos el cambio
            updateUI() // Actualizamos la interfaz
        }
    }
    
    func updateUI() {
        // Código para actualizar la interfaz
    }
    
  • Calcular valores de otras propiedades: El cambio en una propiedad puede afectar el valor de otra.
    var radius: Double = 0.0 {
        didSet { // El setter (didSet)
            area = Double.pi * radius * radius // Recalcular el área al cambiar el radio
        }
    }
    
    var area: Double = 0.0 // Propiedad que depende de radius
    

Los setters en Swift pueden usarse para propiedades almacenadas y propiedades calculadas. Para propiedades almacenadas, a menudo se usan observadores de propiedades (willSet y didSet), que se llaman antes y después de establecer un nuevo valor, respectivamente. Para propiedades calculadas, el setter (set) define cómo debe asignarse un valor.

var myProperty: String {
    // Getter
    get {
        return "El valor es: \(internalValue)"
    }
    // Setter
    set(newValue) {
        internalValue = newValue + " procesado" // Modificamos el valor asignado
    }
}

private var internalValue: String = "" // Propiedad interna almacenada