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:
-
@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.
-
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í.