Protokollarga Extension orqali qo'shilgan metodlarning boshqaruvi qanday amalga oshiriladi?
sobes.tech AI
AIdan javob
Swift protokollariga qo'shilgan kengaytmalar orqali metodlar statik taqsimot bilan amalga oshiriladi. Bu shuni anglatadiki, bunday metodlar chaqirilishi kompilatsiya bosqichida aniqlanadi, ishga tushirish vaqtida emas. To'g'ridan-to'g'ri protokolga e'lon qilingan metodlardan (virtual metodlar jadvali orqali dinamik taqsimotni ishlatadiganlar) farqli o'laroq, kengaytmalar metodlari ma'lum tiplarda qayta yozib bo'lmaydi va to'g'ridan-to'g'ri kompilatsiya bosqichida ma'lum bo'lgan tipga chaqiriladi.
Masalan, agar sizda protokol va kengaytma bilan metod bo'lsa, va keyin bu protokolni amalga oshiradigan tur bo'lsa, kengaytma metodiga chaqirish har doim kengaytma implementatsiyasini ishlatadi, hatto tur shunday nom bilan metodni amalga oshirsa ham. Bu shundan kelib chiqadiki, kengaytmalar protokolning virtual chaqirish jadvaliga metodlar qo'shmaydi.
protocol MyProtocol {}
extension MyProtocol {
func greet() {
print("Salom kengaytma")
}
}
struct MyStruct: MyProtocol {
func greet() {
print("Salom MyStructdan")
}
}
let obj: MyProtocol = MyStruct()
obj.greet() // Chiqish: Salom kengaytma
let obj2 = MyStruct()
obj2.greet() // Chiqish: Salom MyStructdan
Shu sababli, protokol kengaytmalaridagi metodlar statik chaqiriladi, bu arxitektura dizaynida hisobga olinishi kerak.