128 votos

¿Cómo crear un protocolo con métodos que son opcionales?

Me di cuenta de los métodos marcaron opcionales en varios protocolos definidos en el iPhone SDK, tales como el UIActionSheetDelegate por ejemplo el protocolo.

¿Cómo puedo definir un protocolo propio y establecer algunos de los métodos como opcional?

239voto

Matt Gallagher Puntos 10431

Desde la Manzana de la página en "Protocolos Formales":

Protocolo Facultativo De los métodos pueden ser marcados como opcionales el uso de la @opcional de palabras clave. Correspondiente a la @opcional modal palabra clave, hay un @necesario palabra clave formalmente denotar la semántica de el comportamiento predeterminado. Usted puede usar @opcionales y @necesarios para la partición su protocolo en secciones como se puede ver ajuste. Si no se especifica ningún palabra clave, el valor predeterminado es @necesario.

@protocol MyProtocol

- (void)requiredMethod;

@optional
- (void)anOptionalMethod;
- (void)anotherOptionalMethod;

@required
- (void)anotherRequiredMethod;

@end

11voto

e.James Puntos 51680

Uso el @optional palabra clave antes de la declaración de método para hacerla opcional. Así de sencillo!

// myProtocol.h
@protocol myProtocol
- (void)myMandatoryMethod:(id)someArgument;
@optional
- (void)myOptionalMethod:(id)someArgument;
@end
// myClass.m
@interface myClass : someSuperClass <myProtocol>
    //...
@end

4voto

user3540599 Puntos 11

Ley de protocolos igual abstracta clase, así que tipo de @optional define los métodos que son opcionales para la implementación.

Así que en el código someMethod1, someMethod2 y someMethod4 son necesarios métodos (debe implementar) y someMethod3 es opcional, si no implementamos este método también compilador voluntad no arroja ninguna advertencia.

@protocol myPrtocol<NSObject>

-(void)someMethod1:(id)someArgument;
-(void)someMethod2:(id)someArugument;

@optional

-(void)someMethod3:(id)someArgument;

@required //by default

-(void)someMethod4:(id)someArgument;

@end

// sampleClass.m
@interface sampleClass : someSuperClass <myProtocol>
//...

@end

Iteramos.com

Iteramos es una comunidad de desarrolladores que busca expandir el conocimiento de la programación mas allá del inglés.
Tenemos una gran cantidad de contenido, y también puedes hacer tus propias preguntas o resolver las de los demás.

Powered by:

X