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é?