/ / dodanie Char lub NSString do enumu Objective C - ios, object-c, enums, nsdictionary

dodawanie znaku Char lub NSString do celu C - ios, target-c, enums, nsdictionary

W moim pliku nagłówkowym utworzyłem wyliczenie, które wygląda tak

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

Po pierwsze, nie jestem nawet pewien, czy to prawdasposób zadeklarować char w enum, ale Jak widać, niektóre wartości są liczbami całkowitymi, a inne są znakami. Jednak pojawia się następujący błąd, gdy próbuję umieścić te wartości w NSDicitonary w ten sposób

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

ale poniżej pojawia się ten błąd

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

jakakolwiek pomoc byłaby bardzo doceniana.

Odpowiedzi:

1 dla odpowiedzi № 1

Na enum jest w zasadzie int rodzaj. Twój enum definicja jest w porządku. Problemem jest twoje użycie w słowniku. Musisz owinąć enum wartości w NSNumber.

Próbować:

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

lub nawet lepiej (używając nowoczesnego Objective-C):

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

1 dla odpowiedzi nr 2

Musisz przechowywać w nim obiekty, więc nie możesz przechowywać pliku intraczej a NSNumber, co można zrobić, dołączając plik @ przed stałą liczbową:

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

Jednak potrzebne jest wyjaśnienie w tej sprawie:

Po pierwsze, nie jestem nawet pewien, czy to właściwy sposób deklarowania znaku w wyliczeniu, ale jak widać, niektóre wartości są liczbami całkowitymi, a inne znakami.

Kiedy definiujesz wyliczenie, przechowuje on liczby całkowite, nie ma znaczenia, czy ustawisz znaki jako wartości, są one zgodne z int więc kompilator nie będzie narzekał. Ale typ pamięci jest taki sam, nadal są to liczby całkowite i każdy typ zgodny z liczbami całkowitymi będzie akceptowany.


0 dla odpowiedzi № 3

Zarówno obiekty, jak i klucze w NSDictionary musząbyć obiektami, a klucze w szczególności muszą być obiektami zgodnymi z NSCopying. Aby użyć liczb int w NSDictionary, musisz przekonwertować je na NSNumbers. Możesz użyć jednego z nich [NSNumber numberWithInt:stDCMD] lub jeśli używasz nowszej wersji Xcode, @(stDCMD).


0 dla odpowiedzi nr 4

W C char jest rodzajem short int. enum może przechowywać tylko typy całkowite. NSDictionary nie może przechowywać typów C. Tylko przedmioty. Możesz opakować swoje typy C w NSValue lub NSNumber, aby umieścić je w NSDictionary.