Категория NSMutableDictionary / NSDictionary должен возвращать NSMutableDictionary / NSDictionary В зависимости от класса вызывающего - PullRequest
1 голос
/ 30 декабря 2011

Я был занят этим несколько часов, но не вижу ни головы, ни хвоста.

Как создать категорию NS(Mutable)Dictionary, которую я могу разрешить возвращать тот же класс, что и класс метода отправки.

Sample

+(NSDictionary *)dictionaryWithAdditions:path error:(NSError**)error;

NSDictionary * dict = [NSDictionary dictionaryWithAdditions:path error:&error];

должен вернуть NSDictionary.

И

+(NSMutableDictionary *)dictionaryWithAdditions:path error:(NSError**)error;

NSMutableDictionary *dict = [NSMutableDictionary dictionaryWithAdditions:path error:&error];

должен вернуть NSMutableDictionary.

Я не хочу возвращать id, чтобы избежать возможного предупреждения и т. Д.

Предложения, как мне создать это в одной категории с управлением ошибками?

Ответы [ 2 ]

0 голосов
/ 30 декабря 2011

Какие предупреждения вы получите при возврате id? Это то, что стандартный метод init делает в любом случае.

Ваш метод, вероятно, будет выглядеть примерно так:

+ (id)dictionaryWithAdditions:path error:(NSError**)error;
{
     id dictionary = [[[self alloc] init] autorelease];

     // ... do something

     return dictionary;
}
0 голосов
/ 30 декабря 2011

Вам нужно либо создать два разных метода (например, dictionaryWithAdditions: и mutableDictionaryWithAdditions:), либо вернуть id (я бы предложил последний).Система типов не позволяет нам сказать «NSDictionary, если получатель статически типизирован как NSDictionary, NSMutableDictionary, если получатель статически типизирован как NSMutableDictionary, и ошибка в противном случае».

...