En la clase A tengo esto:referencia a un NSString * static const de otra clase
static NSString * const kMyConstant = @"my constant string";
¿Cómo se puede hacer referencia a esta clase de B I?
En la clase A tengo esto:referencia a un NSString * static const de otra clase
static NSString * const kMyConstant = @"my constant string";
¿Cómo se puede hacer referencia a esta clase de B I?
Usted debe extern la cadena en la cabecera, y luego definir la cadena de la aplicación.
//ClassA.h
extern NSString * const kMyConstant;
//ClassA.m
NSString * const kMyConstant = @"my constant string";
//ClassB.h/m
#import "ClassA.h"
...
NSLog(@"String Constant: %@", kMyConstant);
Debe eliminar static
, que especifica que kMyConstant
solo está visible en los archivos vinculados con este.
A continuación, declarar (en contraposición a la definición ) la cadena en la cabecera de la clase A:
extern NSString * const kMyConstant;
e importación de cabecera que donde quiera que desee utilizar esta cadena. La declaración extern
dice que existe un NSString * const
por el nombre kMyConstant
cuyo almacenamiento se crea en algún otro lugar.
Si la definición estática es ya en el encabezado, debe moverlo a otro lugar (normalmente el archivo de implementación). Las cosas solo se pueden definir una vez, y si intenta importar un archivo que define una variable, obtendrá un error de enlazador.
Si es estática, no se puede (eso es lo que la palabra clave estática es para).
Si simplemente se declara como una variable global, sin embargo, se puede hacer algo como esto:
// ClassA.m
NSString *const str = @"Foo";
// ClassB.m
extern NSString *const str;
NSLog(@"str is: %@", str);