/ / aggiunta di Char o NSString in enumerazione Objective C - ios, object-c, enums, nsdictionary

aggiungendo Char o NSString nell'enunciato dell'obiettivo C, obiettivo-c, enumerazione, nsdictionary

Ho creato un enum nel mio file header che assomiglia a questo

typedef enum {stTMD = 1, stT2MD = 2, stDCMD = "D", stMBMD = "M"} stTypes;

Prima di tutto non sono nemmeno sicuro che sia correttomodo di dichiarare un carattere in un enum ma Come puoi vedere alcuni valori sono numeri interi e altri sono caratteri. Tuttavia, ricevo il seguente errore quando provo a inserire questi valori in un NSDicitonary come questo

NSDictionary *iCTypes = [[NSDictionary alloc] initWithObjectsAndKeys:stDCMD,@"stMB", stMBMD,@"stMBMD", nil];

ma sto ricevendo questo errore di seguito

Implicit conversion of "int" to "id" is disallowed with ARC

Qualsiasi aiuto sarebbe molto apprezzato.

risposte:

1 per risposta № 1

Un enum è fondamentalmente un int genere. Il tuo enum la definizione va bene. Il problema è il tuo uso nel dizionario. Devi avvolgere il file enum valori in un NSNumber.

Provare:

NSDictionary *iCTypes = [[NSDictionary alloc] initWithObjectsAndKeys:[NSNumber numberWithInt:stDCMD], @"stMB", [NSNumber numberWithInt:stMBMD] ,@"stMBMD", nil];

o anche meglio (usando il moderno Objective-C):

NSDictionary *icTypes = @{ @(stDCMD) : @"stMB", @(stMBMD) : @"stMBMD" };

1 per risposta № 2

È necessario memorizzare oggetti al suo interno, quindi non è possibile memorizzare un intpiuttosto a NSNumber, che può essere effettuato aggiungendo a @ prima della costante numerica:

NSDictionary *iCTypes = [[NSDictionary alloc] initWithObjectsAndKeys: @(stDCMD),@"stMB", @(stMBMD),@"stMBMD", nil];

Tuttavia è necessario un chiarimento al riguardo:

Prima di tutto non sono nemmeno sicuro che sia il modo corretto di dichiarare un carattere in un enum, ma come puoi vedere alcuni valori sono numeri interi e altri sono caratteri.

Quando si definisce un enum che memorizza numeri interi, non importa se si impostano i caratteri come valori, sono compatibili con int quindi il compilatore non si lamenterà. Ma il tipo di archiviazione è lo stesso, sono ancora numeri interi e verrà accettato qualsiasi tipo compatibile con numeri interi.


0 per risposta № 3

Devono essere sia gli oggetti che le chiavi in ​​un NSDictionaryessere oggetti e le chiavi in ​​particolare devono essere oggetti conformi a NSCopying. Per usare gli ints in un NSDictionary, devi convertirli in NSNumbers. Puoi usare entrambi [NSNumber numberWithInt:stDCMD] oppure, se stai utilizzando una versione più recente di Xcode, @(stDCMD).


0 per risposta № 4

In C char è una specie di int breve. enum può contenere solo tipi interi. NSDictionary non può contenere tipi C. Solo oggetti. È possibile racchiudere i tipi C in NSValue o NSNumber per inserire un NSDictionary.