2012-05-07 16 views
7

Sto provando a fare alcune animazioni su un oggetto che ho impostato tramite IB. Sto aggiungendo una dichiarazione anticipata ai miei .h in questo modo:iOS - importazione vs inoltro dichiarazione riguardante setAlpha

@class MySpecialClass; 

e poi messa a punto di una proprietà in questo modo:

@property (nonatomic, retain) IBOutlet MySpecialClass *specialClass; 

voglio essere in grado di nascondere la specialClass utilizzando setAlpha, ma io ottenere il seguente errore da xcode durante il tentativo di compilazione.

Receiver type 'MySpecialClass' for instance message is a forward declaration. 

Devo importare la mia classe invece di una dichiarazione di inoltro? Mi piacerebbe non dover importare nulla di inutile se non dovessi farlo.

risposta

44

Inoltra dichiarazione dice semplicemente al compilatore, "Ehi, so che sto dichiarando cose che non riconosci, ma quando dico @MyClass, prometto che lo importerò # nell'implementazione ".

si utilizza dichiarazione anticipata per evitare che cose del genere circolare comprende (MyClass importa YourClass che importa MiaClasse che ...), ma la 'promessa' che fate con il vostro codice, è che ti #import in seguito

+4

Una delle spiegazioni migliori e più concise che ho letto - ben fatta. Ti voterei di più se fosse possibile. – BonanzaDriver

+1

ho finalmente capito la dichiarazione in avanti, grazie :) – dreampowder

5

È necessario importarlo. La dichiarazione diretta è solo per silenziare il compilatore che questa classe esiste, ma non ha idea dei suoi membri, metodi, proprietà, dimensioni ...

+9

L'importazione può essere eseguita nel file .m, comunque. Il solito schema è forward statement in .h, import in .m. – jrturton

+0

Sì, è corretto. – graver

Problemi correlati