Подтвердить что ты не робот

Xcode 4.6, используемый как имя предыдущего параметра, а не как часть селектора

Я получаю следующее предупреждение от Xcode 4.6.

.. used as the name of the previous parameter rather than as part of the selector

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

У меня есть 109 таких предупреждений, поэтому я явно плохо пишу методы.

Вот несколько моих методов.

+(NSString*)addFormatPrice:(double)dblPrice:(BOOL)booRemoveCurSymbol;

-(void)showHelpChoices:(UIView *)vw:(id)dg;

Итак, каков правильный способ написать эти методы?

4b9b3361

Ответ 1

Ваш первый метод объявляет селектор +addFormatPrice::. С пробелами он выглядит как

+ (NSString *)addFormatPrice:(double)dblPrice :(BOOL)booRemoveCurSymbol;

Это вызывается как [NSString addFormatPrice:0.3 :YES].

Что вы должны сделать, это на самом деле дать имя предыдущему параметру, например

+ (NSString *)addFormatPrice:(double)dblPrice removeCurSymbol:(BOOL)booRemoveCurSymbol;

который затем будет вызван как [NSString addFormatPrice:0.3 removeCurSymbol:YES].

Ответ 2

Возможно, вам будет легче понять, разделите ли вы их на несколько строк?

+(NSString*)addFormatPrice:(double)dblPrice
                          :(BOOL)booRemoveCurSymbol;

-(void)showHelpChoices:(UIView *)vw
                      :(id)dg;

Структура имени метода Objective-C выглядит следующим образом:

- (returntype)firstPartOfMethodWithParameter:(type)nameOfFirstParameter secondPartOfNameWhichDescribesSecondParameter:(type)nameOfSecondParameter;

То есть полное имя метода разбивается, а имена параметров вкраплены. Двоеточия отделяют каждую "метку" от ее параметра; пробел отделяет имя параметра от следующей части имени метода.

В ваших методах отсутствуют две части, бит, которые описывают второстепенные параметры. В настоящее время имена ваших методов: addFormatPrice:: и showHelpChoices::, оба из которых являются законными, но неидиоматичными. Когда вы их вызовете, это будет выглядеть так:

[Excelsior addFormatPrice:2.0 :YES];
[thumpy showHelpChoices:aView :obj];

который должен дать понять, что ваши имена не совсем правильные. Вам просто нужно добавить метки для вторых параметров:

+(NSString*)addFormatPrice:(double)dblPrice
    removingCurrencySymbol:(BOOL)booRemoveCurSymbol;

-(void)showHelpChoices:(UIView *)vw
             digeridoo:(id)dg;

Ответ 3

Для получения рекомендаций по наименованию методов Objective-C вам следует обратиться к руководству по стилю Objective-C, например Руководства Apple по кодированию для Cocoa, Любое руководство по стилю, которое следует за соглашениями сообщества и каркасов Apple, предполагает, что вы назовете свой метод таким образом, чтобы цель каждого параметра была четко описана в имени метода.

+(NSString *)priceStringWithPrice:(double)price removeCurrencySymbol:(BOOL)removeCurrencySymbol

-(void)showHelpChoicesInView:(UIView *)view withSomethingWithAnUndecipherableName:(id)mysteryParameter

Обратите внимание на значительное изменение имени, чтобы указать, что (я предполагаю) оно делает в вашей программе и что делает каждый параметр. Ваш метод класса ничего не добавляет - скорее, он возвращает новую строку. Это делает ваш код естественным сочетанием с другими разработчиками, каркасами Apple, другими библиотеками, которые вы можете использовать, и значительно улучшает читаемость. Неименование ваших параметров ухудшает читаемость и значительно упрощает обслуживание.

В соответствующей заметке ненужные сокращения, включая венгерскую нотацию, сотрясаются и не соответствуют стилю, и если вы будете следовать хорошим методам именования, они вам не понадобятся и будут генерировать код, который приятно поддерживать. Поэтому не называйте его vw, назовите его view или viewToShowIn. Не называть его strVal называть его valueString или somethingSpecificallyDescribingTheNatureOfTheValueString.

Ответ 4

Вот как вы должны это делать

+(NSString*)addFormatPrice:(double)dblPrice removeCurSymbol:(BOOL)booRemoveCurSymbol;

-(void)showHelpChoices:(UIView *)vw  whatEverThePurposeOf:(id)dg;

попытайтесь извлечь уроки из примера кода Apple.

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions

для начала, вы можете попытаться написать свой метод в предложении.

как это

applicationdidFinishLaunchingWithOptions

затем добавьте описание существительного с такими параметрами, как (UIApplication *)application и (NSDictionary *)launchOptions