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.