pasar gratis fotos descargar cuenta crear apple iphone objective-c

iphone - gratis - itunes store



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

Desde la página de Apple en " Protocolos formales ":

Los métodos de protocolo opcionales se pueden marcar como opcionales usando la palabra clave @optional. En correspondencia con la palabra clave modal @optional, hay una palabra clave @required para indicar formalmente la semántica del comportamiento predeterminado. Puede usar @optional y @required para dividir su protocolo en secciones como mejor le parezca. Si no especifica ninguna palabra clave, el valor predeterminado es @required.

@protocol MyProtocol - (void)requiredMethod; @optional - (void)anOptionalMethod; - (void)anotherOptionalMethod; @required - (void)anotherRequiredMethod; @end

Noté que los métodos marcados UIActionSheetDelegate opcionales en varios protocolos definidos en el iPhone SDK, como el protocolo UIActionSheetDelegate , por ejemplo.

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


Los protocolos actúan de la misma manera que las clases abstractas, por lo que la palabra clave @optional define los métodos que son opcionales para la implementación.

Entonces, en el código, algunos Métodos1, algunosMétodo2 y algunosMétodos4 son obligatorios (deben implementarse). someMethod3 es opcional: si no implementamos este método, el compilador no lanzará 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


Protocolos es un conjunto de reglas. Podemos crear protocolos como el siguiente ejemplo:

TestProtocols.h

@protocol TestProtocols <NSObject> @optional -(void)testMethodOptional; @required // by default -(void)testMethodRequired; @end

Implementación:

TestClass.h

#import "TestProtocols.h" @interface TestClass : NSObject <TestProtocols> @end

TestClass.m

#import "TestClass.h" @implemenation TestClass //optional to implement -(void)testMethodOptional{ // Your Code } //required to implement -(void)testMethodRequired{ // Your Code } @end


Si un método en un protocolo está marcado como opcional, debe verificar si un objeto implementa ese método antes de intentar llamarlo.

Como ejemplo, la vista de gráfico circular podría probar el método de título de segmento de esta manera:

NSString *thisSegmentTitle; if ([self.dataSource respondsToSelector:@selector(titleForSegmentAtIndex:)]) { thisSegmentTitle = [self.dataSource titleForSegmentAtIndex:index]; }

El método respondsToSelector: utiliza un selector, que hace referencia al identificador de un método después de la compilación. Puede proporcionar el identificador correcto utilizando la directiva @selector () y especificando el nombre del método.

Si la fuente de datos en este ejemplo implementa el método, se usa el título; de lo contrario, el título permanece nulo.


Use la palabra clave @optional antes de su declaración de método para que sea opcional. ¡Simple como eso!

// myProtocol.h @protocol myProtocol - (void)myMandatoryMethod:(id)someArgument; @optional - (void)myOptionalMethod:(id)someArgument; @end

// myClass.m @interface myClass : someSuperClass <myProtocol> //... @end