Более удобный доступ к NSArray и NSDictionary - PullRequest
2 голосов
/ 08 сентября 2011

Обратите внимание, что это всего лишь академический вопрос.

В Ruby вы можете легко получить доступ к элементам массива и словаря (хэш):

value = myHash['myKey']

В Objective C вам нужен методcall:

value = [myDict objectForKey:@"myKey"];

Как можно переопределить скобки определенного типа или определить макрос, чтобы приблизить синтаксис Objective C к Ruby?

Ответы [ 4 ]

4 голосов
/ 09 июня 2013

Просто обновление:

Начиная с iOS 6, я думаю, вы МОЖЕТЕ использовать такой синтаксис:

value = dictionary[@"key"];

Это эквивалентно

value = [dictionary objectForKey:@"key"];

Более того, если мы говорим о NSMutableDictionary, вы можете добавить новые объекты в словарь, например:

NSMutableDictionary *dictionary = [[NSMutableDictionary alloc]init];
dictionary[@"a"] = @"A";
NSLog(@"%@",dictionary[@"a"]);
4 голосов
/ 08 сентября 2011

То, что вы пытаетесь сделать, требует языковой функции, называемой «перегрузка оператора».Objective-C не допускает перегрузки операторов, потому что разработчики языка чувствовали, что перегрузка операторов вредна чаще, чем полезна.

C ++ допускает перегрузку операторов, поэтому один из способов получить нужный синтаксисэто обернуть ваши коллекции в классы C ++ и использовать их вместо этого.Чтобы переключиться на Objective-C ++, просто измените расширения ваших файлов реализации с .m на .mm.

Лично я бы рекомендовал не использовать обертки C ++ вокруг коллекций, потому что это сделает ваш код сложнее для других Objective-CПрограммисты, чтобы читать, и это сломает некоторые из более продвинутых функций XCode.Например, вы больше не сможете использовать инструменты рефакторинга, потому что Xcode не сможет правильно проанализировать ваш код.

3 голосов
/ 08 сентября 2011

В других ответах говорилось, почему вы не можете это сделать - или как обойти это, но Objective-C - это многословный язык - и использование описательных имен является частью удовольствия язык.Конечно, вы набираете еще несколько букв, но с завершением кода писать вряд ли медленнее, и вы точно видите, что делаете.

1 голос
/ 08 сентября 2011

Переключитесь на Objective-C ++, определите классы-оболочки C ++ для NSDictionary и NSMutableDictionary и переопределите оператор, оператор индекса массива.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...