Sobes.tech
Junior — Middle

Jaki wpływ ma użycie adnotacji @objc dynamic w kodzie?

sobes.tech AI

Odpowiedź od AI

Adnotacja @objc dynamic w Swift pełni dwie główne funkcje:

  1. @objc — sprawia, że metoda lub właściwość jest dostępna dla środowiska wykonawczego Objective-C. Jest to konieczne, jeśli chcesz korzystać z dynamicznego dispatchingu, współpracować z API Objective-C, takim jak KVO (Key-Value Observing), selektory lub starszy kod.

  2. dynamic — zmusza kompilator do używania dynamicznego dispatchingu przez środowisko wykonawcze Objective-C, zamiast optymalizacji statycznych lub wbudowanych. Umożliwia to na przykład przechwytywanie wywołań metod, co jest konieczne dla KVO.

Razem @objc dynamic jest zwykle używane dla właściwości i metod, które muszą obsługiwać dynamiczne obserwowanie zmian (KVO) lub być dostępne z Objective-C.

Przykład:

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

let person = Person()
var observation = person.observe(\.name, options: [.new]) { object, change in
    print("Imię zmieniło się na \(change.newValue ?? "")")
}
person.name = "Ivan" // Wywołuje obserwatora

Bez @objc dynamic KVO nie będzie działać, ponieważ mechanizm opiera się na środowisku wykonawczym Objective-C i dynamicznym dispatchingu.