Sobes.tech
Junior — Middle

Qual è l'impatto dell'uso dell'annotazione @objc dynamic nel codice?

sobes.tech AI

Risposta dell'AI

L’annotazione @objc dynamic in Swift svolge due funzioni principali:

  1. @objc — rende un metodo o una proprietà accessibile al runtime Objective-C. Questo è necessario se si desidera utilizzare il dispatching dinamico, interagire con API Objective-C come KVO (Key-Value Observing), selettori o codice legacy.

  2. dynamic — costringe il compilatore a usare il dispatching dinamico tramite il runtime Objective-C, invece di ottimizzazioni statiche o incorporate. Questo permette, ad esempio, di intercettare le chiamate ai metodi, cosa necessaria per KVO.

Insieme, @objc dynamic viene generalmente usato per proprietà e metodi che devono supportare l’osservazione dinamica delle modifiche (KVO) o essere accessibili da Objective-C.

Esempio:

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

let person = Person()
var observation = person.observe(\.name, options: [.new]) { object, change in
    print("Il nome è cambiato in \(change.newValue ?? "")")
}
person.name = "Ivan" // Attiva l’osservatore

Senza @objc dynamic, KVO non funzionerà, poiché il meccanismo si basa sul runtime Objective-C e sulla dispatching dinamica.