Sobes.tech
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, не може да се създаде слаб референция, и ще трябва да използвате силни референции или други механизми за управление на паметта.