Использование объекта, возвращенного из getObject в NSMutableDictionary
Я новичок в Obj-C, так что это может быть очевидным вопросом.
Я добавляю 10 чисел в качестве ключей к NSMutableDictionary со значением 0 для всех из них. Что-то вроде этого --
for( i=1; i<10; i++)
{
[dict setObject:[NSNumber numberWithInt:0] forKey:[NSNumber numberWithInt:i]];
}
Теперь на более позднем этапе кода я хочу сохранить объект для номера ключа и получить его значение. В этом случае, например, для числа 3 в качестве ключа мы сохранили значение 0. Для этого я использую этот код -
id numberObj = [game objectForKey:[NSNumber numberWithInt:3]];
int numberObjValue = ????
Я вижу идентификатор в отладчике как указывающий на 0. Но я не уверен, как получить его в целочисленной переменной, которую я объявил. Надеюсь, что это имеет смысл.
Я печатаю numberObj, и некоторый адрес печатается, как и ожидалось. Как мне превратить этот универсальный идентификатор в NSNumber и впоследствии сохранить его в numberObjValue?
3 ответа
id
это не тип данных. Это просто означает, что он может вернуть любой тип объекта. Когда вы уверены, что вставили NSNumber
Вы просто получаете это значение в NSNumber
,
NSNumber* myNumber = [myDict objectForKey:key];
Вот и все. Если вы хотите убедиться, что это на самом деле NSNumber
будучи возвращенным, используйте isKindOfClass:
,
Объект уже является NSNumber. Вы вводите NSNumber, и вы получаете NSNumber. Там нет необходимости преобразования. Вы можете назначить его переменной NSNumber, но объект не будет более или менее NSNumber для этого. Таким образом, вам не нужно превращать его в NSNumber, и вы можете получить целочисленное значение числа обычным способом, который вы делаете со всеми NSNumbers.
Вы можете получить номер из словаря и затем сохранить его в int
с помощью intValue
:
NSNumber *numberObj = (NSNumber *)[game objectForKey:[NSNumber numberWithInt:3]];
int numberObjValue = [numberObj intValue];
Или вы можете сделать это одной строкой:
int numberObjValue = [[game objectForKey:[NSNumber numberWithInt:3]] intValue];