0
votes

Impossible d'appeler une autre méthode de classe en utilisant le délégué à Swift

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


5 commentaires

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 () é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 ). BTNCLICKED sera-t-il appelé?


3 Réponses :


1
votes

Parce que vous instaniez l'instance de classe A à l'aide de xxx pré>

clairement, vous n'avez pas initialisé délégué code> propriété dans A code> parce que sa facultative sa La valeur par défaut est nulle p>

maintenant lorsque vous appelez p>

@IBAction func btnClicked(_ sender: Any) {
    let objA = A()
    let objB = B()
    objA.delegate = objB
    objA.delegate?.TestA()
}


2 commentaires

@ Manisha-upadhyay: Merci d'avoir accepté la réponse, quelle était la question?


Le edit 1 ci-dessus fonctionnera mais ne bénéficie pas de la définition du test de protocole . Cela fonctionnera même lorsque classe B n'est pas conforme à protocole testta . Voir ma réponse ci-dessous pour expliquer.



1
votes

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.


0 commentaires

0
votes

La réponse par Sandeep Bhandari a raison.

Quelques informations pour une meilleure compréhension du protocole et des délégués. TESTA est un Protocol et un délégué VAR optionnel est défini dans Classe A . Cette configuration est correcte. L'idée de cette configuration est que tout utilisateur de classe A , dans ce cas classe B qui est conforme à protocole testta obtient un rappel de Classe A . Vous devez appeler la fonction délégué.testa () de la fonction de classe A . L'implémentation actuelle de ViewController ne bénéficie pas du tout à la définition du protocole et des délégués.

Pour obtenir une utilisation correcte, la cabine Classe A est modifiée comme suit: xxx

et modifier ViewController < / code> comme suit (copié classe B pour la complétude): xxx

fonction maintenant implémentée dans classe B pour être conforme à la conformité Pour Protocole Testa sera appelé lorsque Process () fonction sur obja de Classe A est appelé. C'est une meilleure utilisation du protocole et du délégué. J'espère que cela aide.


0 commentaires