Sobes.tech
Junior — Middle

Таъсири истифодаи қайдномаи @objc dynamic дар код чист?

sobes.tech AI

Ҷавоб аз AI

یادداشت @objc dynamic در Swift دو وظیفه اصلی را انجام می‌دهد:

  1. @objc — یک روش یا ویژگی را در دسترس زمان اجرا Objective-C قرار می‌دهد. این برای استفاده از مسیریابی دینامیک، تعامل با API در Objective-C، مانند KVO (مشاهده مقدار کلید)، سلوکتورها یا کد قدیمی ضروری است.

  2. dynamic — کامپایلر را مجبور می‌کند تا از مسیریابی دینامیک از طریق زمان اجرا Objective-C استفاده کند، به جای بهینه‌سازی‌های استاتیک یا جاسازی شده. این امکان، برای مثال، گرفتن تماس‌های متد، که برای KVO لازم است، را فراهم می‌کند.

با هم، @objc dynamic معمولاً برای ویژگی‌ها و متدهایی استفاده می‌شود که باید از مشاهده دینامیک تغییرات (KVO) پشتیبانی کنند یا از Objective-C در دسترس باشند.

مثال:

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

let person = Person()
var observation = person.observe(\.name, options: [.new]) { object, change in
    print("نام تغییر کرد به \(change.newValue ?? "")")
}
person.name = "Ivan" // فعال‌سازی ناظر

بدون @objc dynamic، KVO کار نخواهد کرد، چون مکانیزم بر پایه زمان اجرا Objective-C و مسیریابی دینامیک است.