2012-04-25 8 views
9

ho definito una serie di costanti stringa come qui di seguito, in modo macro,Objective-C: come raggruppare una serie di costanti stringa?

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

Tutte queste costanti dovrebbero essere utilizzati in stesso contesto, in modo da mi piacerebbe vincolo loro in uno stesso spazio dei nomi, e Non voglio renderli globali, proprio come ha detto questo post.

D'altra parte, potrei inserire tutte le costanti numeriche in un enum ma non funziona per le stringhe. Quindi come posso raggruppare queste costanti di stringa correlate?

risposta

25

Ecco uno approccio:

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" 
}; 

In uso:

NSString * str = MONExtResult.AppID; 
+0

questa soluzione è corretta e non causerà alcuna perdita di memoria? Saranno sempre quelle stringhe trattenute/non ferme? – user969153

+0

@ user969153 come 'static NSString * const SomeConstant = @" SomeConstant ";', la stringa è immortale. – justin

+0

Se si desidera utilizzare la struct/stringhe all'interno di un singolo file class/m Esiste comunque un modo per farlo senza dover dichiarare le variabili e definire separatamente i propri valori? (Per risparmiare la digitazione del boilerplate) –

0

Creare un file di intestazione in cui si dichiara le corde e importarlo quando necessario

+0

Intendi un file di intestazione che contiene tutte le costanti? L'ho già fatto, ma non penso che sia per il mio scopo – fifth

+0

perché no? è possibile includerli nel contesto specifico e farlo con esso – MJB

0

Si può creare un nome di file di intestazione "Constants.h". Allora avete bisogno di importare questo file di intestazione in cui si desidera utilizzare queste costanti come:

#import "Constants.h" 
0

Creare un file di intestazione dicono Constants.h

Aggiungi tutte le costanti in questo file. Queste possono essere costanti che ti piacerebbe usare in classi deferenti del tuo progetto.

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

Ora, invece di importare questo Constants.h in ogni classe, goto <project name>-Prefix.pch di file e importare il file qui.

#import "SCConstants.h" 

ora è possibile utilizzare le costanti in qualsiasi classe del progetto a proprio agio.

Problemi correlati