Protokollara Extension vasitəsilə əlavə olunan metodların idarə olunması necə həyata keçirilir?
sobes.tech Süni İntellekt
AI-dan cavab
Swift protokoluna əlavə olunan genişləndirmə metodları statik yönləndirmə ilə həyata keçirilir. Bu, belə metodların çağırışının tərtib zamanı müəyyənləşdiyi, icra zamanı deyil, deməkdir. Birbaşa protokol daxilində elan olunan metodlardan (sanal metodlar cədvəli vasitəsilə dinamik yönləndirmə istifadə edənlər) fərqli olaraq, genişləndirmə metodları müəyyən tiplərdə yenidən yaza bilməz və tərtib zamanı məlum olan tipə birbaşa çağırılır.
Məsələn, əgər sizin protokol və onunla genişləndirmə ilə metod varsa, və sonra bu protokolu həyata keçirən bir tip varsa, genişləndirmədən olan metod çağırışı həmişə genişləndirmənin tətbiqini istifadə edəcək, hətta tip eyni adlı metodu həyata keçirirsə belə. Bu, genişləndirmələrin protokolun virtual çağırış cədvəlinə metodlar əlavə etməməsindən irəli gəlir.
protocol MyProtocol {}
extension MyProtocol {
func greet() {
print("Salam genişləndirmədən")
}
}
struct MyStruct: MyProtocol {
func greet() {
print("Salam MyStruct-dən")
}
}
let obj: MyProtocol = MyStruct()
obj.greet() // Çıxış: Salam genişləndirmədən
let obj2 = MyStruct()
obj2.greet() // Çıxış: Salam MyStruct-dən
Bu səbəbdən, protokol genişləndirmə metodları statik çağırılır və bu, memarlıq dizaynında nəzərə alınmalıdır.