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;
Итак, каков правильный способ написать эти методы?
Ответы
Ответ 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