Middle
Как да създадем слаб препратка към променлива от тип протокол в Swift?
sobes.tech AI
Отговор от 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 предотвратява циклични силни препратки, например при делегиране, където обектът-носител препраща към делегата, а делегатът обратно към носителя (или подобна структура). Слабата препратка не увеличава броя на препратките към обекта.