Назад к вопросам
Middle
80
questionbank
Как можно создать слабую ссылку на переменную типа протокол в Swift?
Sobes Copilot
Получайте ответы в реальном времени
Ответ от нейросети
sobes.tech AI
Необходимо использовать ключевое слово weak перед объявлением переменной типа протокол. Протокол должен быть объявлен с возможностью применения только к классам: либо наследовать от AnyObject, либо использовать ключевое слово class.
Пример с наследованием от AnyObject:
protocol MyDelegate: AnyObject {
func doSomething()
}
class MyClass {
weak var delegate: MyDelegate?
}
Пример с ключевым словом class:
protocol AnotherDelegate: class { // Вариант до Swift 4.1
func doSomethingElse()
}
// В современных версиях Swift (>= 4.1) достаточно наследования от AnyObject
Применение weak предотвращает циклические сильные ссылки в случае, например, делегирования, где объект-владелец ссылается на делегата, а делегат обратно на владельца (или схожую структуру). Слабая ссылка не увеличивает счетчик ссылок объекта.