Buscar..


Definición de protocolo básico

Definiendo un nuevo protocolo:

@protocol NewProtocol

- (void)protocolMethod:(id)argument;

- (id)anotherMethod;

@end

Métodos opcionales y requeridos.

Por defecto, todos los métodos declarados en un protocolo son obligatorios. Esto significa que cualquier clase que se ajuste a este protocolo debe implementar esos métodos.

También es posible declarar métodos opcionales . Estos métodos solo se pueden implementar si es necesario.

Se marcan métodos opcionales con la directiva @optional .

@protocol NewProtocol
- (void)protocolMethod:(id)argument;
@optional
- (id)anotherMethod;
@end

En este caso, solo otro anotherMethod está marcado como opcional; se supone que los métodos sin la directiva @optional son requeridos.

La directiva @optional aplica a los métodos que siguen, hasta el final de la definición del protocolo o, hasta que se encuentre otra directiva.

@protocol NewProtocol
- (void)protocolMethod:(id)argument;
@optional
- (id)anotherMethod;
- (void)andAnotherMethod:(id)argument;
@required
- (void)lastProtocolMethod;
@end

Este último ejemplo define un protocolo con dos métodos opcionales y dos métodos requeridos.

Conforme a los Protocolos

La siguiente sintaxis indica que una clase adopta un protocolo, utilizando paréntesis angulares.

@interface NewClass : NSObject <NewProtocol>
...
@end

Esto significa que cualquier instancia de NewClass responderá a los métodos declarados en su interfaz, pero también proporcionará una implementación para todos los métodos requeridos de NewProtocol .

También es posible que una clase se ajuste a múltiples protocolos, separándolos con coma.

@interface NewClass : NSObject <NewProtocol, AnotherProtocol, MyProtocol>
...
@end

Al igual que cuando se ajusta a un solo protocolo, la clase debe implementar cada método requerido de cada protocolo y cada método opcional que elija implementar.

Declaraciones Forward

Es posible declarar el nombre del protocolo sin métodos:

@protocol Person;

utilízalo tu código (definición de clase, etc):

@interface World : NSObject
@property (strong, nonatomic) NSArray<id<some>> *employees;
@end

y luego defina el método del protocolo en algún lugar de su código:

@protocol Person
- (NSString *)gender;
- (NSString *)name;
@end

Es útil cuando no necesita conocer los detalles de los protocolos hasta que importe ese archivo con la definición del protocolo. Por lo tanto, el archivo de encabezado de su clase permanece claro y solo contiene detalles de la clase.

Comprobando la existencia de implementaciones de métodos opcionales.

if ([object respondsToSelector:@selector(someOptionalMethodInProtocol:)])
{
    [object someOptionalMethodInProtocol:argument];
}

Verifica el protocolo de conformidad

Devuelve un valor booleano que indica si la clase cumple con el protocolo:

[MyClass conformsToProtocol:@protocol(MyProtocol) ];



Modified text is an extract of the original Stack Overflow Documentation
Licenciado bajo CC BY-SA 3.0
No afiliado a Stack Overflow