2012-04-25 18 views
9

he definido una serie de constantes de cadena como a continuación, en forma macro,Objetivo-C: ¿cómo agrupar una serie de constantes de cadena?

#define EXT_RESULT_APPID @"appid" 
#define EXT_RESULT_ERROR_CODE @"errorcode" 
#define EXT_RESULT_PROGRESS @"progress" 
... 

Todas estas constantes se supone para ser utilizado en un mismo contexto, por lo que me gustaría a la restricción en un mismo espacio de nombres, y No quiero que sean globales, al igual que lo que dijo post.

Por otro lado, podría poner todas las constantes numéricas en una enumeración, pero no funciona para las cadenas. Entonces, ¿cómo podría agrupar estas constantes de cadenas relacionadas?

Respuesta

25

Aquí es uno de los enfoques:

MONExtResult.h

// add __unsafe_unretained if compiling for ARC 
struct MONExtResultStruct { 
    NSString * const AppID; 
    NSString * const ErrorCode; 
    NSString * const Progress; 
}; 

extern const struct MONExtResultStruct MONExtResult; 

MONExtResult.m

const struct MONExtResultStruct MONExtResult = { 
    .AppID = @"appid", 
    .ErrorCode = @"errorcode", 
    .Progress = @"progress" 
}; 

En uso:

NSString * str = MONExtResult.AppID; 
+0

¿Es esta solución correcta y no causará ninguna pérdida de memoria? ¿Serán siempre esas cadenas retenidas/no nulas? – user969153

+0

@ user969153 como 'static NSString * const SomeConstant = @" SomeConstant ";', la cadena es inmortal. – justin

+0

Si solo quiere usar struct/strings dentro de un solo archivo de clase/m ¿Hay alguna forma de hacerlo sin tener que declarar las variables y definir sus valores por separado? (Para guardar texto repetitivo) –

0

Crear un archivo de cabecera, donde se declara sus cadenas y lo importa cuando sea necesario

+0

¿Quiere decir un archivo de encabezado que contiene todas las constantes? Ya lo hice, pero no creo que sea para mi propósito – fifth

+0

¿por qué no? puede incluirlos en el contexto específico y se puede hacer con él – MJB

0

Es posible crear un nombre de archivo de cabecera "constants.h". Luego hay que importar este archivo de cabecera en la que desea utilizar estas constantes como:

#import "Constants.h" 
0

Crear un archivo de cabecera dicen Constants.h

Añadir todas las constantes en este archivo. Estos pueden ser constantes que le gustaría usar en clases diferentes de su proyecto.

#define EXT_RESULT_APPID @"appid" 
#define EXT_RESULT_ERROR_CODE @"errorcode" 
#define EXT_RESULT_PROGRESS @"progress" 

Ahora, en lugar de importar este Constants.h en cada clase, archivo Goto <project name>-Prefix.pch e importar el archivo aquí.

#import "SCConstants.h" 

ahora usted puede usar las Constantes en cualquier clase del proyecto para su comodidad.

Cuestiones relacionadas