Aký vplyv má použitie anotácie @objc dynamic v kóde?
sobes.tech AI
Odpoveď od AI
Poznámka @objc dynamic v Swift plní dve hlavné funkcie:
-
@objc — sprístupňuje metódu alebo vlastnosť pre runtime Objective-C. To je potrebné, ak chcete použiť dynamické smerovanie, pracovať s API v Objective-C, ako je KVO (pozorovanie hodnoty podľa kľúča), selektory alebo starý kód.
-
dynamic — núti prekladač používať dynamické smerovanie cez runtime Objective-C, namiesto statických alebo vložených optimalizácií. To umožňuje napríklad zachytávanie volaní metód, čo je potrebné pre KVO.
Spolu @objc dynamic sa zvyčajne používa pre vlastnosti a metódy, ktoré musia podporovať dynamické sledovanie zmien (KVO) alebo byť dostupné z Objective-C.
Príklad:
class Person: NSObject {
@objc dynamic var name: String = ""
}
let person = Person()
var observation = person.observe(\.name, options: [.new]) { object, change in
print("Meno sa zmenilo na \(change.newValue ?? "")")
}
person.name = "Ivan" // Spustí pozorovateľa
Bez @objc dynamic KVO nebude fungovať, pretože mechanizmus je založený na Objective-C runtime a dynamickom smerovaní.