Junior — Middle
Може ли да се създаде слаба препратка към свойство, реализиращо протокол?
sobes.tech AI
Отговор от AI
В Swift не е възможно да се създаде слаб (weak) референция към свойство, което реализира протокол, ако този протокол не е ограничен до класове (class-only protocol). Това е свързано с факта, че слабите референции могат да се прилагат само към референтни типове (класове), а протоколите могат да бъдат реализирани както от класове, така и от структури или изброявания.
За да използвате слаб референция към свойство с тип протокол, трябва да ограничите протокола чрез наследяване от AnyObject, например:
protocol MyProtocol: AnyObject {
func doSomething()
}
class MyClass: MyProtocol {
func doSomething() {
print("Правя нещо")
}
}
class AnotherClass {
weak var delegate: MyProtocol?
}
Ако протоколът не е ограничен до AnyObject, не може да се създаде слаб референция, и ще трябва да използвате силни референции или други механизми за управление на паметта.