in classe A ho questo:riferimento a un static NSString * const da un'altra classe
static NSString * const kMyConstant = @"my constant string";
Come posso fare riferimento a questo dalla classe B?
in classe A ho questo:riferimento a un static NSString * const da un'altra classe
static NSString * const kMyConstant = @"my constant string";
Come posso fare riferimento a questo dalla classe B?
Si dovrebbe extern la stringa nell'intestazione, e quindi definire la stringa per l'attuazione.
//ClassA.h
extern NSString * const kMyConstant;
//ClassA.m
NSString * const kMyConstant = @"my constant string";
//ClassB.h/m
#import "ClassA.h"
...
NSLog(@"String Constant: %@", kMyConstant);
È necessario rimuovere static
- che specifica che kMyConstant
è visibile solo nei file collegati con questo.
Poi, dichiarare (al contrario di definire) la stringa nel colpo di testa di Classe A:
extern NSString * const kMyConstant;
e importazione che intestazione ovunque si desidera utilizzare questa stringa. La dichiarazione extern
indica che esiste uno NSString * const
con il nome kMyConstant
il cui archivio viene creato in un altro luogo.
Se la definizione statica è già nell'intestazione, è necessario spostarlo altrove (in genere il file di implementazione). Le cose possono essere definite solo una volta e se cerchi di importare un file che definisce una variabile, otterrai un errore del linker.
Se è statico, non è possibile (questo è ciò che la parola chiave statica è per).
Se semplicemente dichiararlo come una variabile globale, tuttavia, si può fare qualcosa di simile:
// ClassA.m
NSString *const str = @"Foo";
// ClassB.m
extern NSString *const str;
NSLog(@"str is: %@", str);