Назад к вопросам
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 предотвращает циклические сильные ссылки в случае, например, делегирования, где объект-владелец ссылается на делегата, а делегат обратно на владельца (или схожую структуру). Слабая ссылка не увеличивает счетчик ссылок объекта.