Назад к вопросам
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-ссылку создать нельзя, и придется использовать сильные ссылки или другие механизмы управления памятью.