Sobes.tech
Junior — Middle

Welke impact heeft het gebruik van de annotatie @objc dynamic in de code?

sobes.tech AI

Antwoord van AI

De annotatie @objc dynamic in Swift vervult twee hoofdrollen:

  1. @objc — maakt een methode of eigenschap toegankelijk voor de Objective-C runtime. Dit is nodig als je dynamische dispatching wilt gebruiken, wilt samenwerken met Objective-C API's zoals KVO (Key-Value Observing), selectors of oude code.

  2. dynamic — dwingt de compiler om gebruik te maken van dynamische dispatching via de Objective-C runtime, in plaats van statische of ingebedde optimalisaties. Dit maakt bijvoorbeeld het onderscheppen van method calls mogelijk, wat nodig is voor KVO.

Samen worden @objc dynamic meestal gebruikt voor eigenschappen en methoden die dynamisch observatie van veranderingen (KVO) moeten ondersteunen of toegankelijk moeten zijn vanuit Objective-C.

Voorbeeld:

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

let person = Person()
var observation = person.observe(\.name, options: [.new]) { object, change in
    print("Naam veranderd naar \(change.newValue ?? "")")
}
person.name = "Ivan" // Activeert de observer

Zonder @objc dynamic zal KVO niet werken, omdat het mechanisme gebaseerd is op de Objective-C runtime en dynamische dispatching.