Domanda

Sto lentamente sviluppando la mia applicazione in uno stato funzionante.

Sto usando due funzioni chiamate setCollection e addToCollection. Queste funzioni accettano entrambe NSArray come input.

Ho anche una funzione chiamata add in cui utilizzo entrambe queste funzioni. Quando provo a compilare, Xcode mostra un errore:

  

'setCollection' non dichiarato (primo utilizzo in questa funzione)

Suppongo che ciò abbia a che fare con la funzione chiamata definita sotto la funzione attiva. Un'altra ipotesi sarebbe che le funzioni dovrebbero essere globalizzate per essere utilizzabili nella mia <=> funzione.

Normalmente sono un programmatore php. il modo in cui Php gestisce questo è il primo. Le funzioni chiamate dovrebbero essere prima delle funzioni che le usano, perché altrimenti non esistono. C'è un modo per rendere ancora disponibili le funzioni in fase di esecuzione o devo riorganizzare tutte le funzioni per farle funzionare correttamente?

È stato utile?

Soluzione

Se le tue funzioni sono globali (non fanno parte di una classe), devi solo mettere la dichiarazione prima dell'uso, proprio come suggerisce eJames.

Se le tue funzioni sono in realtà metodi (parte di una classe), devi dichiarare una categoria anonima della tua classe prima dell'implementazione e inserire le dichiarazioni dei metodi in questa interfaccia:

@interface Myclass()
- (void) setCollection:(NSArray*)array;
- (void) addToCollection:(NSArray*)array;
@end

@implementation Myclass

// Code that calls setCollection or addToCollection

- (void) setCollection:(NSArray*)array
{
    // your code here
}

- (void) addToCollection:(NSArray*)array
{
    // your code here
}

@end

In questo modo, non è necessario esporre le funzioni nell'interfaccia principale di MyClass.

Altri suggerimenti

Puoi dichiarare le funzioni in anticipo come segue:

void setCollection(NSArray * array);
void addToCollection(NSArray * array);

//...

// code that calls setCollection or addToCollection

//...

void setCollection(NSArray * array)
{
    // your code here
}

void addToCollection(NSArray * array)
{
    // your code here
}

Se stai creando una classe personalizzata, e queste sono funzioni membro (generalmente chiamate metodi in Objective-C), allora dichiareresti i metodi nell'intestazione della classe e li definiresti nel tuo file sorgente della classe:

//MyClass.h:
@interface MyClass : NSObject
{

}

- (void)setCollection:(NSArray *)array;
- (void)addToCollection:(NSArray *)array;

@end

//MyClass.m:

#import "MyClass.h"

@implementation MyClass

- (void)setCollection:(NSArray *)array
{
    // your code here
}

- (void)addToCollection:(NSArray *)array
{
    // your code here
}

@end

//some other source file

#import "MyClass.h"

//...

MyClass * collection = [[MyClass alloc] init];
[collection setCollection:someArray];
[collection addToCollection:someArray];

//...
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top