Sobes.tech
Junior — Middle

Jaký dopad má použití anotace @objc dynamic v kódu?

sobes.tech AI

Odpověď od AI

Poznámka @objc dynamic v Swiftu plní dvě hlavní funkce:

  1. @objc — zpřístupňuje metodu nebo vlastnost pro runtime Objective-C. To je nutné, pokud chcete používat dynamické směrování, pracovat s API v Objective-C, například KVO (Key-Value Observing), selektory nebo starý kód.

  2. dynamic — nutí kompilátor používat dynamické směrování přes runtime Objective-C, namísto statických nebo vložených optimalizací. To umožňuje například zachytávat volání metod, což je nutné pro KVO.

Společně se @objc dynamic obvykle používá pro vlastnosti a metody, které mají podporovat dynamické sledování změn (KVO) nebo být dostupné z Objective-C.

Příklad:

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

let person = Person()
var observation = person.observe(\.name, options: [.new]) { object, change in
    print("Jméno se změnilo na \(change.newValue ?? "")")
}
person.name = "Ivan" // Spustí pozorovatele

Bez @objc dynamic KVO nebude fungovat, protože mechanismus je založen na runtime Objective-C a dynamickém směrování.