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