J'ai un objet (un UIViewController) qui peut ou non être conforme à un protocole que j'ai défini.
Je sais que je peux déterminer si l'objet est conforme au protocole, puis appeler la méthode en toute sécurité:
if([self.myViewController conformsToProtocol:@protocol(MyProtocol)]) {
[self.myViewController protocolMethod]; // <-- warning here
}
Cependant, XCode affiche un avertissement:
warning 'UIViewController' may not respond to '-protocolMethod'
Quelle est la bonne façon d'éviter cet avertissement? Je n'arrive pas à jouer en self.myViewController
tant que MyProtocol
classe.
id<MyProtocol> p = (id<MyProtocol>)self.myViewController;
Cette réponse et @andys sont tous les deux corrects, mais le sien est plus correct.UIViewController
àvc
dans l'exemple de ma réponse et qu'il est déclaré commeid <MyProtocol>
?id
problème dans lequel jeter des informations de type à l'aide de l'utilisation est: gist.github.com/nsforge/7743616Vous pouvez le lancer comme ceci:
Cela m'a un peu gêné aussi. En Objective-C, le protocole n'est pas le type lui-même, vous devez donc spécifier
id
(ou un autre type, tel queNSObject
) avec le protocole que vous voulez.la source
(id)
fonctionne aussi. Est-ce une mauvaise forme?