Comment créer une référence faible à un protocole en Swift pur (sans @objc)
Bonjour à tous ! J'apprends Swift et j'essaie d'implémenter le pattern délégué, mais je rencontre un problème de fuite mémoire. J'ai un protocole :
```swift
protocol MyDelegate: class {
func didSomething()
}
class MyClass {
var delegate: MyDelegate?
func doSomething() {
delegate?.didSomething()
}
}
```
Je sais qu'en Objective-C, on pouvait utiliser `weak` pour les protocoles marqués avec `@objc`. Mais je veux écrire en Swift pur. Quand j'essaie de faire :
```swift
weak var delegate: MyDelegate?
```
Le compilateur donne une erreur : `'weak' may only be applied to class and class-bound protocol types`. J'ai lu qu'il faut hériter le protocole de `AnyObject` ou utiliser `class` dans la définition du protocole. Mais je ne comprends pas complètement comment cela fonctionne et quelle est la différence.
Ma question principale : comment déclarer correctement un protocole pour pouvoir utiliser `weak` sur la propriété déléguée, tout en évitant un retain cycle ? Je veux que le délégué puisse être n'importe quel type (class
No answers yet.
Connectez-vous pour laisser une réponse
Blogs