583 votes

Comment puis-je faire une référence de protocole faible en Swift "pur" (sans @objc) ?

Les références faibles ne semblent pas fonctionner en Swift, sauf si un protocole est déclaré comme @objc, ce que je ne veux pas dans une application Swift pure :-)

Ce code donne lieu à une erreur de compilation ('weak' ne peut pas être appliqué au type non classe 'MyClassDelegate') :

class MyClass {
  weak var delegate: MyClassDelegate?
}

protocol MyClassDelegate {
}

Je dois préfixer le protocole avec @objc, puis cela fonctionne.

Question : Quelle est la méthode Swift "pure" pour réaliser un délégué faible ?

0 votes

-1voto

Rakesh Kunwar Points 57

Le protocole doit être une sous-classe de AnyObject, classe

exemple donné ci-dessous

    protocol NameOfProtocol: class {
   // member of protocol
    }
   class ClassName: UIViewController {
      weak var delegate: NameOfProtocol? 
    }

-9voto

Mike Rose Points 137

Apple utilise "NSObjectProtocol" au lieu de "class".

public protocol UIScrollViewDelegate : NSObjectProtocol {
   ...
}

Cela fonctionne également pour moi et a supprimé les erreurs que je voyais en essayant de mettre en œuvre mon propre modèle de délégué.

5 votes

Sans rapport avec la question, cette question porte sur la construction d'une classe Swift pure (spécifiquement non NSObject) supportant un objet délégué. Il ne s'agit pas de mettre en œuvre des protocoles Objective-C, ce que vous faites. Ce dernier nécessite @objc alias NSObjectProtocol.

0 votes

OK, mais pas recommandé.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X