Sobes.tech
Junior — Middle

¿Qué impacto tiene el uso de la anotación @objc dynamic en el código?

sobes.tech AI

Respuesta de la IA

La anotación @objc dynamic en Swift cumple dos funciones principales:

  1. @objc — hace que un método o propiedad esté disponible para el tiempo de ejecución de Objective-C. Esto es necesario si deseas usar la despacho dinámico, interactuar con API en Objective-C, como KVO (Observación de Valor Clave), selectores o código antiguo.

  2. dynamic — obliga al compilador a usar la despacho dinámica a través del tiempo de ejecución de Objective-C, en lugar de optimizaciones estáticas o embebidas. Esto permite, por ejemplo, interceptar llamadas a métodos, lo cual es necesario para KVO.

Juntos, @objc dynamic se usan generalmente para propiedades y métodos que deben soportar observación dinámica de cambios (KVO) o ser accesibles desde Objective-C.

Ejemplo:

class Person: NSObject {
    @objc dynamic var name: String = ""
}

let person = Person()
var observation = person.observe(\.name, options: [.new]) { object, change in
    print("El nombre cambió a \(change.newValue ?? "")")
}
person.name = "Ivan" // Dispara el observador

Sin @objc dynamic, KVO no funcionará, ya que el mecanismo se basa en el tiempo de ejecución de Objective-C y la despacho dinámica.