Sobes.tech
Junior — Middle

Da li je moguće napraviti slabu referencu na svojstvo koje implementira protokol?

sobes.tech АИ

Одговор од АИ

У Swift-у није могуће креирати слабу (weak) референцу на својство које имплементира протокол ако тај протокол није ограничен на класе (class-only protocol). То је због тога што се слабне референце могу применити само на референтне типове (класе), док протоколи могу бити имплементирани како од стране класа, тако и структура или енумерација.

Да бисте користили слабу референцу на својство типа протокола, потребно је ограничити протокол наследством од AnyObject, на пример:

protocol MyProtocol: AnyObject {
    func doSomething()
}

class MyClass: MyProtocol {
    func doSomething() {
        print("Радим нешто")
    }
}

class AnotherClass {
    weak var delegate: MyProtocol?
}

Ако протокол није ограничен на AnyObject, не може се креирати слабa референца, и потребно је користити јаке референце или друге механизме управљања меморијом.