Je viens d'un arrière-plan java, et j'essayais d'utiliser un protocole comme une interface java.Simulation de l'interface dans Java avec objectif-c
En Java, vous pouvez avoir un objet de mettre en œuvre une interface et passer à une méthode comme ceci:
public interface MyInterface {
void myMethod();
}
public class MyObject implements MyInterface {
void myMethod() {// operations}
}
public class MyFactory {
static void doSomething(MyInterface obj) {
obj.myMethod();
}
}
public void main(String[] args) {
// get instance of MyInterface from a given factory
MyInterface obj = new MyObject();
// call method
MyFactory.doSomething(obj);
}
Je me demandais s'il est possible de faire la même chose avec Objective-C, peut-être avec d'autres syntaxe.
La façon dont j'ai trouvé est de déclarer un protocole
@protocol MyProtocol
-(NSUInteger)someMethod;
@end
alors mon objet serait « d'adopter » ce protocole et une méthode spécifique que je pourrais écrire:
-(int) add:(NSObject*)object {
if ([object conformsToProtocol:@protocol(MyProtocol)]) {
// I get a warning
[object someMethod];
} else {
// other staff
}
}
La première question serait comment supprimer l'avertissement, mais dans tous les cas, un autre appelant peut toujours transmettre un mauvais objet à la classe, puisque la vérification est effectuée dans la méthode. Pouvez-vous indiquer d'autres moyens possibles pour cela?
grâce Leonardo
super, cela semble fonctionner, mais j'ai reçu un avertissement de compilateur en ligne: if ([objet conformeToProtocol: @protocol (MyProtocol)]) disant que l'objet ne répond pas à conformsToProtocol. Cela semble disparaître si je remplace dans la signature de la méthode id, je suis un peu confus sur lequel utiliser –
Leonardo
Vous ne devez pas tester par 'conformsToProtocol'. Si vous essayez d'ajouter un objet qui n'est pas conforme à MyProtocol, le compilateur vous avertit. Donc, ** si vous prenez soin de tous les avertissements **, il est garanti que toujours un objet conforme au protocole est passé. – Yuji
@Leonardo: Voir modification. –