Sobes.tech
Junior — Middle

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:

  1. @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.

  2. 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í.