Red de conocimiento informático - Problemas con los teléfonos móviles - Swift5.1: protocolos ampliados e implementaciones predeterminadas

Swift5.1: protocolos ampliados e implementaciones predeterminadas

Los protocolos se pueden ampliar para proporcionar implementaciones de propiedades, métodos y subíndices para tipos que siguen el protocolo. De esta manera, puede implementar funciones basadas en el protocolo mismo, sin tener que duplicar la misma implementación en cada tipo que se ajuste al protocolo o utilizar funciones globales.

Por ejemplo, el protocolo RandomNumberGenerator se puede ampliar para proporcionar un método randomBool(). Este método utiliza el método random() definido en el protocolo para devolver un valor Bool aleatorio:

A través de la extensión del protocolo, todos los tipos que siguen el protocolo pueden obtener automáticamente la implementación del método agregado por esta extensión sin necesidad para cualquier modificación adicional:

Una extensión de protocolo puede agregar una implementación a un tipo que se ajuste al protocolo, pero no puede declarar que el protocolo hereda de otro protocolo. La herencia del protocolo sólo se puede especificar en la declaración del protocolo.

Las extensiones de protocolo se pueden utilizar para proporcionar implementaciones predeterminadas para métodos y propiedades calculadas requeridas por el protocolo. Si los tipos conformes proporcionan sus propias implementaciones para estos requisitos, se utilizarán estas implementaciones personalizadas en lugar de las implementaciones predeterminadas en la extensión.

Por ejemplo, el protocolo PrettyTextRepresentable hereda del protocolo TextRepresentable y se le puede proporcionar una propiedad PrettyTextualDescription predeterminada que simplemente devuelve el valor de la propiedad textualDescription:

Nota:

1. Protocolo, puede heredar el protocolo o puede ampliar el protocolo propio del sistema.

2. Implementación predeterminada: el protocolo solo formula una interfaz estándar y no puede escribir implementaciones específicas, pero la implementación de atributos y métodos se puede escribir en extensiones.