Sobes.tech
Junior — Middle

Quel impact l'utilisation de l'annotation @objc dynamic a-t-elle dans le code?

sobes.tech IA

Réponse de l'IA

L’annotation @objc dynamic en Swift remplit deux fonctions principales:

  1. @objc — rend une méthode ou une propriété accessible au runtime Objective-C. Cela est nécessaire si vous souhaitez utiliser la dispatching dynamique, interagir avec l’API Objective-C, comme KVO (Observation par Valeur Clé), les sélecteurs ou du code ancien.

  2. dynamic — force le compilateur à utiliser la dispatching dynamique via le runtime Objective-C, plutôt que des optimisations statiques ou intégrées. Cela permet, par exemple, d’intercepter les appels de méthodes, ce qui est nécessaire pour KVO.

Ensemble, @objc dynamic est généralement utilisé pour des propriétés et méthodes qui doivent supporter l’observation dynamique des changements (KVO) ou être accessibles depuis Objective-C.

Exemple:

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

let person = Person()
var observation = person.observe(\.name, options: [.new]) { object, change in
    print("Le nom a changé en \(change.newValue ?? "")")
}
person.name = "Ivan" // Déclenche l’observateur

Sans @objc dynamic, KVO ne fonctionnera pas, car le mécanisme repose sur le runtime Objective-C et la dispatching dynamique.