J'ai créé un délégué pour une classe maintenant dans mon objet de jeu j'ai appelé cette méthode: p> alors maintenant, si J'initie cet objet n'importe où et définir le délégué tout fonctionne bien jusqu'à ce que le gamesté soit appelé, car il n'est pas implémenté dans l'objet principal où l'objet de jeu est créé (car sa facultative). P> J'ai essayé des variations de Ceci P> if(![self.delegate respondsToSelector: @selector(gameStarted)]) {
//[self.delegate gameStarted];
}
3 Réponses :
omettez la négation à partir de votre si code> instruction:
Oh mon Dieu: D Je faisais d'abord utilisé cette déclaration pour un retour rapide si cela ne répond pas à, puis je viens de la copier pour cette méthode. quelle erreur stupide. Merci
Notez que votre délégué devra être conforme à NsObject: @protocol XXX
Vérification Si un délégué met en œuvre une méthode facultative, puis l'appelant est un tel modèle commun que j'utilise un préprocesseur macro La macro est: p> et il est utilisé comme ceci: p> note que cette version fonctionne seulement avec des méthodes sans paramètres. P> À l'origine, il a été mis en œuvre comme une fonction C, mais cela provoque des avertissements avec Safe_Call code> qui vérifie
répondselector: code> puis appelle la méthode .
SectacleSelector code> fuites lors de l'utilisation de l'ARC. En tant que macro de préprocesseur, cela fonctionne exactement comme prévu. p> p>
Pour accomplir cela à Swift, je vous recommande ce qui suit: puis pour appeler le en option code> sur votre
délégué code> objet, simple Utilisez
si délégué.OptionalMethod? () {} code> p> p>