En primer lugar, los protocolos y las clases son cosas diferentes con diferentes nombres para diferentes propósitos, a diferencia de C ++.
Utiliza el protocolo para crear, bueno, un protocolo: la “forma” de una clase. Si una clase sigue un protocolo determinado, puede estar seguro de que la clase implementa lo que requiere el protocolo. La idea es muy similar a la interfaz del lenguaje Java.
Por ejemplo, tienes un protocolo de perro. Usted sabe que un perro necesita algo de comida, corteza y popó, “sentarse”, “ladrar” y otros comandos y algunas devoluciones de llamada cuando necesita su atención. Todos los perros comparten estas propiedades.
- ¿Por qué sigo recibiendo un mensaje de que mi método de pago de Apple ha sido rechazado?
- ¿Cómo se diseñarían las antiguas API de Objective-C de manera diferente si se escribieran en Swift?
- ¿Puedo instalar la versión beta de iOS 11 ahora?
- ¿Se puede incrustar una transmisión en vivo en una 'página' de una aplicación o necesita ser a pantalla completa?
- Quiero crear un juego de dibujo simple pero único para dispositivos móviles, como una forma de entrar en el mercado de aplicaciones, ¿cuál es la mejor manera de hacerlo?
De hecho, ¡puedes entrenar a un hámster para que sea como un perro, haciendo que siga el protocolo de tu perro! Aquí está la mayor diferencia de la subclase.
Puede recopilar todo esto en un protocolo e implementar diferentes clases de perros ahora: chiwawa, bullterier, pastor alemán e incluso galgo italiano, todos los cuales son esencialmente diferentes pero comparten las mismas golosinas definidas por el protocolo del perro.
¿Por qué no solo una subclase, podrías preguntar? Como el protocolo no es una clase, es simplemente un molde. Sí, claro, los perros deben ser subclasificados de la clase Mamíferos, pero todos los mamíferos son diferentes y agrupar estas diferencias definiendo el protocolo es la forma correcta.
Por supuesto, también puede implementar varios protocolos en una clase.
Por ejemplo, un galgo italiano es un perro y un animal vivo al mismo tiempo. Estos son protocolos muy diferentes, pero el galgo italiano se ajusta a ambos: es un perro y un animal vivo al mismo tiempo. Entonces, cuando implementa una clase de galgos, puede hacer que siga los protocolos Dog y LivelyAnimal.
Al hacer esto, hace que su clase de galgos sea predecible: definitivamente sabe que es un perro y un animal animado al mismo tiempo y que comparte todas las propiedades del perro y el animal animado. Pero, siguiendo un protocolo, su perro no es en realidad un animal en sentido estricto, porque no lo subclasificamos de la clase Mammalia. 🙂