Ich habe ein Objekt (einen UIViewController), das möglicherweise einem von mir definierten Protokoll entspricht oder nicht.
Ich weiß, dass ich feststellen kann, ob das Objekt dem Protokoll entspricht, und dann die Methode sicher aufrufen kann:
if([self.myViewController conformsToProtocol:@protocol(MyProtocol)]) {
[self.myViewController protocolMethod]; // <-- warning here
}
XCode zeigt jedoch eine Warnung an:
warning 'UIViewController' may not respond to '-protocolMethod'
Was ist der richtige Weg, um diese Warnung zu verhindern? Ich kann nicht self.myViewController
als MyProtocol
Klasse wirken.
quelle
id<MyProtocol> p = (id<MyProtocol>)self.myViewController;
Diese Antwort und @andys ist beide richtig, aber sein ist mehr richtig.UIViewController
dievc
im Beispiel in meiner Antwort deklariert wurde und die als deklariert istid <MyProtocol>
?id
ein Problem ist: gist.github.com/nsforge/7743616Sie können es so besetzen:
Das warf mich auch ein bisschen. In Objective-C ist das Protokoll nicht der Typ selbst, daher müssen Sie zusammen mit dem gewünschten Protokoll
id
(oder einen anderen Typ, z. B.NSObject
) angeben .quelle
(id)
funktioniert. Ist das eine schlechte Form?