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 референца, и потребно је користити јаке референце или друге механизме управљања меморијом.