2011-10-24 15 views
5

Sto provando a inserire una funzione in stile C nell'intestazione di una classe Objective-C. (La mia terminologia potrebbe essere sbagliata qui: sono abituato a scrivere metodi di classe Objective-C piuttosto che funzioni). Sembra come segue:Dichiarazione di funzione Obj-C nell'intestazione

// 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 questo si traduce in:

Previsto '=', ' ' ';', 'asm' o' attributo' prima '{' token

Qualche idea su cosa mi manca? Grazie.

risposta

11

La mia ipotesi è che si inserisca la definizione della funzione nell'interfaccia @ della classe. Invece, assicurarsi che le dichiarazioni di funzioni stile C sono al di fuori delle dichiarazioni @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

Quando si dichiara metodi C-Styled si deve dimenticare - o +. Basta dichiarare il metodo come quello standard C, prima dell'istruzione @end:

void function_name(int, int);

2

Il corpo della funzione deve essere nel file .m anziché nell'intestazione.

Finché la dichiarazione della funzione (NSInteger sort(NSString *aString, NSString *bString, void *context);) rimane nell'intestazione sarete ancora in grado di accedere alla funzione di ordinamento da qualsiasi parte si importa l'intestazione.