J'essaie d'appeler la méthode de classe B de la classe A sur le bouton Tap Event. Mais cela ne fonctionne pas et ci-dessous est mon code.
var objB = B() var objA = A() objA.delegate = objB
3 Réponses :
Parce que vous instaniez l'instance de classe A à l'aide de clairement, vous n'avez pas initialisé maintenant lorsque vous appelez p> délégué code> propriété dans A code> parce que sa facultative sa La valeur par défaut est nulle p> @IBAction func btnClicked(_ sender: Any) {
let objA = A()
let objB = B()
objA.delegate = objB
objA.delegate?.TestA()
}
@ Manisha-upadhyay: Merci d'avoir accepté la réponse, quelle était la question?
Le edit 1 b> ci-dessus fonctionnera mais ne bénéficie pas de la définition du test de protocole code>. Cela fonctionnera même lorsque classe B code> n'est pas conforme à protocole testta code>. Voir ma réponse ci-dessous pour expliquer.
L'obja.delegate n'est jamais affecté à un objet, il a donc une valeur initiale de NIL. Le ? L'opérateur évite d'appeler une fonction sur un objet nil. P>
La réponse par Sandeep Bhandari a raison.
Quelques informations pour une meilleure compréhension du protocole et des délégués.
Pour obtenir une utilisation correcte, la cabine et modifier fonction maintenant implémentée dans TESTA CODE> est un Protocol CODE> et un délégué code> VAR optionnel CODE> est défini dans Classe A code>. Cette configuration est correcte. L'idée de cette configuration est que tout utilisateur de classe A code>, dans ce cas classe B code> qui est conforme à protocole testta code> obtient un rappel de Classe A code>. Vous devez appeler la fonction délégué.testa () code> de la fonction de classe A code>.
L'implémentation actuelle de ViewController code> ne bénéficie pas du tout à la définition du protocole et des délégués. p> Classe A code> est modifiée comme suit: p> ViewController < / code> comme suit (copié classe B code> pour la complétude): p> classe B code> pour être conforme à la conformité Pour Protocole Testa Code> sera appelé lorsque Process () Code> fonction sur obja code> de Classe A code> est appelé.
C'est une meilleure utilisation du protocole et du délégué. J'espère que cela aide. P> p>
Vous n'avez rien attribué à la propriété déléguée d'Obja. Sa nil. C'est pourquoi rien ne se passe. Créez un objet de la classe B. Attribuez-le à la déléguée d'un objet de classe A.
où est
var objb = b () code> écrit ??Cette réponse peut vous aider Stackoverflow.com/a/40503024/2370587
Dupliqué possible de Exemples de délégués à Swift
Sur ma machine, cela fonctionne (si vous définissez le délégué sur
objb code>).BTNCLICKED code> sera-t-il appelé?