2015-05-07 2 views
1

Я недавно начал использовать Faux Pas (http://fauxpasapp.com/), и для моего проекта я получаю следующее предупреждение несколько раз:Почему я не должен использовать [NSDictionary objectForKey:]?

Старый, многословный синтаксис Objective-C

-[NSDictionary objectForKey:] is called. Consider using an Objective-C subscript expression instead. 

Я не уверен что такое выражение подстроки, и мне не очень повезло найти что-либо на нем. Мне было любопытно, сможет ли кто-нибудь здесь помочь.

Спасибо!

+2

Как это: 'MyDictionary [@«MYKEY»]' – matt

+0

Может, возможно, иметь в виду, используя литералы? https://mikeash.com/pyblog/friday-qa-2012-06-22-objective-c-literals.html –

+0

Вместо этого вы просто указываете 'key' в индексе, например' dict [key] '. Это индексное выражение. – sasquatch

ответ

3

Не существует разницы в производительности, так как буквальный синтаксис более понятен, менее подробен и доступен уже несколько лет.

Если текущий код, как:

id var = [dictionary objectForKey:@"key"]; 

заменить его:

id var = dictionary[@"key"]; 
1

Вы хотите узнать о Objective-C 2.0. Лучше всего идти прямо к источнику:

http://clang.llvm.org/docs/ObjectiveCLiterals.html

Как вы можете видеть, были введены ряд особенностей языка: NSNumber литералы и «бокс» выражения, наряду с индексацией из NSArray и NSDictionary (и свои собственные классы, если хотите). Это считается «современным» способом.

Xcode реорганизует ваш код в «современную цель-C» для вас (см. Раздел «Редактирование»> «Рефактор»), поэтому вы можете модернизировать свой код, не делая никакой работы!

3

Ну, как правило, вы бы написали что-то вроде этого:

NSDictionary *dictionary = [NSDictionary dictionaryWithObject:[NSNumber numberWithInteger:42] forKey:@"foo"]; 
id value = [dictionary objectForKey:@"foo"]; 

И теперь вы должны написать что-то вроде этого:

NSDictionary *dictionary = @{@"foo": @42}; 
id value = dictionary[@"foo"]; 

Что, я думаю, вы согласитесь, гораздо проще и приятнее смотреть на.

Некоторые хорошая информация о индексацию объектов можно найти на NSHipster

Смежные вопросы