¿Los protocolos de Objective-C que imitan las 'funciones virtuales' generan advertencias del compilador?

StackOverflow https://stackoverflow.com/questions/1435533

Pregunta

En Objective-C, me gustaría obligar a las clases derivadas a implementar una interfaz determinada sin proporcionar una implementación predeterminada (una implementación en la clase principal).

Entiendo que los Protocolos se pueden usar para esto, y creo que entiendo cómo usar los Protocolos, pero aparentemente me falta algo ...

He definido la clase Parent y derivado varias clases Child de parent. Todas las clases secundarias se ajustan a un protocolo que requiere la implementación de myMethod.

Me gustaría recorrer las instancias de Child, refiriéndome a ellas a través de la superclase Parent, llamando a myMethod en cada una.

El compilador, no es sorprendente, advierte que Parent no puede responder a myMethod.

Toda la evidencia sugiere que, de hecho, se llamará a myMethod para cada una de las instancias derivadas de Child, pero el hecho de que reciba una advertencia me incomoda y sugiere que no estoy implementando esto correctamente.

¿Qué me estoy perdiendo?

Gracias

¿Fue útil?

Solución

No es así como se deben utilizar los protocolos. Un protocolo es una interfaz sin una implementación. Si una clase afirma ajustarse a un protocolo (como aparentemente lo hace su clase principal), necesita implementar los métodos o recibirá una advertencia. Lo que desea hacer es que todas las clases que realmente implementan el protocolo declaren que se ajustan a él y, en lugar de referirse a ellas por este nombre de clase principal, refiérase a ellas como id<ProtocolNameHere>. Esto declara que son objetos que se ajustan a ese protocolo.

Otros consejos

Noto mucho interés en los protocolos y en cómo funcionan. Desafortunadamente, hay muchos tutoriales engañosos sobre ellos.

Consulte mi tutorial ¿Herencia o Protocolos? sobre cómo funcionan los protocolos y cuándo usarlos en lugar de la herencia. Se incluye un montón de código de muestra y una discusión sobre cómo se pueden usar los protocolos en lugar de las categorías como análogos de Objective-C a la clase abstracta de otros lenguajes. ¡Buena suerte con tu desarrollo!

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top