Objective-C Language
Protocolos
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)
];