Хранение целых в словаре - PullRequest
13 голосов
/ 10 ноября 2009

Как я понимаю, в Objective-C вы можете помещать Объекты только в словари. Так что, если бы я должен был создать словарь, он должен был бы иметь все объекты. Это означает, что я должен поместить свои int как NSNumber, верно?

СОО ...

NSNumber *testNum = [NSNumber numberWithInt:varMoney];


NSMutableDictionary *dictionary = [[NSMutableDictionary alloc] init];
[dictionary setObject:@"OMG, Object 1!!!!" forKey:@"1"];
[dictionary setObject:@"Number two!" forKey:@"2"];
[dictionary setObject:testNum forKey:@"3"];


NSNumber *retrieved = [dictionary objectForKey:@"3"];
int newVarMoney = [retrieved intValue];

Где varMoney - это int, который был объявлен ранее. У меня вопрос, есть ли лучший способ сохранить "int" в словаре, чем положить его в NSNumber?

Спасибо!

Редактировать: 04/25/13

Прошло много времени с тех пор, как я задавал этот вопрос. Для людей, спотыкающихся об этом в будущем, есть более простые способы сделать это с Apple LLVM Compiler 4.0, который в Xcode уже был по умолчанию. (ARC)

NSMutableDictionary *dictionary = [NSMutableDictionary dictionary];
[dictionary setObject:@1337 forKey:@"1"];

Вот и все, используйте синтаксис @ 1337 для быстрого создания объектов NSNumber. Работает с переменными, поэтому мой выше может стать:

[dictionary setObject:@(varMoney) forKey:@"3"];

или

dictionary[@"mykey"] = @1337;

Simpler.

Ответы [ 3 ]

18 голосов
/ 10 ноября 2009

Вы правы, NSNumber - нормальный способ справиться с этой ситуацией. Вы также можете использовать NSValue или NSDecimalNumber.

5 голосов
/ 10 ноября 2009

Если вы готовы вернуться к использованию Core Foundation (CFDictionaries), вы можете хранить все что угодно. Я определенно создал словари, в которые я помещаю произвольные значения void *.

Вам нужно сделать немного больше сантехники, но не намного, и все это задокументировано.

0 голосов
/ 10 ноября 2009

Извините, но нет :( Не настолько, насколько я знаю. Причина в том, что целые числа не являются объектами, а NSDictionary хранит только объекты.

...