2011-10-24 13 views
5

Estoy tratando de poner una función C-style en el encabezado de una clase Objective-C. (Mi terminología podría estar equivocada aquí; estoy acostumbrado a escribir métodos de clase Objective-C en lugar de funciones). Se ve de la siguiente manera:Declaración de la función Obj-C en el encabezado

// Sort function 
NSInteger sort(NSString *aString, NSString *bString, void *context); 

NSInteger sort(NSString *aString, NSString *bString, void *context) { 
    return [aString compare:bString options:NSNumericSearch]; 
} 

Unforuntately esto se traduce en:

esperaba '=', ' ' ';', 'asm' o' atributo' antes de '{' símbolo

¿Alguna idea de lo que me falta? Gracias.

Respuesta

11

Supongo que pone la definición de la función dentro de la interfaz @ de su clase. En su lugar, asegúrese de que las declaraciones de funciones de estilo C se encuentran fuera de las declaraciones @interface Objective-C:

// declare C functions here 
NSInteger sort(NSString *aString, NSString *bString, void *context); 

@interface MyClass : NSObject 
{ 
    // class instance vars 
} 

// class properties & instance methods 
@end 
1

Al declarar métodos C-labrado debe olvidarse de - o +. Sólo declarar el método como un estándar de C, antes de la declaración @end:

void function_name(int, int);

2

El cuerpo de su función tiene que estar en el archivo .m en lugar de en la cabecera.

Mientras la declaración de su función (NSInteger sort(NSString *aString, NSString *bString, void *context);) permanezca en el encabezado aún podrá acceder a la función de ordenación desde cualquier lugar donde importe el encabezado.

Cuestiones relacionadas