Sobes.tech
Junior — Middle

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.