Sobes.tech
Middle

Comment créer une référence faible à une variable de type protocole en Swift?

sobes.tech IA

Réponse de l'IA

Il est nécessaire d'utiliser le mot-clé weak avant de déclarer une variable de type protocole. Le protocole doit être déclaré de manière à ne pouvoir s'appliquer qu'aux classes : en héritant de AnyObject, ou en utilisant le mot-clé class.

Exemple avec héritage de AnyObject :

protocol MyDelegate: AnyObject {
    func doSomething()
}

class MyClass {
    weak var delegate: MyDelegate?
}

Exemple avec le mot-clé class :

protocol AnotherDelegate: class { // Variante jusqu'à Swift 4.1
    func doSomethingElse()
}

// Dans les versions modernes de Swift (>= 4.1), il suffit d'hériter de `AnyObject`

L'utilisation de weak empêche les cycles de références fortes dans des cas comme la délégation, où un objet propriétaire référence son délégué, et celui-ci référence à son tour le propriétaire (ou une structure similaire). La référence faible n'augmente pas le compteur de références de l'objet.