Sobes.tech
Назад к вопросам
Junior — Middle
70

Можно ли создать слабую ссылку на свойство, реализующее протокол?

Ответ от нейросети

sobes.tech AI

В Swift нельзя создать слабую (weak) ссылку на свойство, которое реализует протокол, если этот протокол не ограничен классом (class-only protocol). Это связано с тем, что слабые ссылки могут применяться только к ссылочным типам (классам), а протоколы могут быть реализованы как классами, так и структурами или перечислениями.

Чтобы использовать weak-ссылку на свойство с типом протокола, нужно ограничить протокол наследованием от AnyObject, например:

protocol MyProtocol: AnyObject {
    func doSomething()
}

class MyClass: MyProtocol {
    func doSomething() {
        print("Doing something")
    }
}

class AnotherClass {
    weak var delegate: MyProtocol?
}

Если протокол не ограничен AnyObject, то weak-ссылку создать нельзя, и придется использовать сильные ссылки или другие механизмы управления памятью.