Sobes.tech
Junior — Middle

Welche Auswirkung hat die Verwendung der Annotation @objc dynamic im Code?

sobes.tech KI

Antwort von AI

Die Annotation @objc dynamic in Swift erfüllt zwei Hauptfunktionen:

  1. @objc — macht eine Methode oder Eigenschaft für die Objective-C-Laufzeit verfügbar. Dies ist notwendig, wenn du dynamische Dispatching verwenden möchtest, mit Objective-C-APIs interagieren willst, wie z.B. KVO (Key-Value Observing), Selektoren oder alten Code.

  2. dynamic — zwingt den Compiler, die dynamische Dispatching über die Objective-C-Laufzeit zu verwenden, anstatt statische oder eingebettete Optimierungen. Das ermöglicht z.B., Methodenaufrufe abzufangen, was für KVO notwendig ist.

Gemeinsam werden @objc dynamic meist für Eigenschaften und Methoden verwendet, die die dynamische Beobachtung von Änderungen (KVO) unterstützen oder aus Objective-C zugänglich sein sollen.

Beispiel:

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

let person = Person()
var observation = person.observe(\.name, options: [.new]) { object, change in
    print("Der Name hat sich geändert auf \(change.newValue ?? "")")
}
person.name = "Ivan" // löst den Beobachter aus

Ohne @objc dynamic funktioniert KVO nicht, da der Mechanismus auf dem Objective-C-Laufzeit- und der dynamischen Dispatching basiert.