Xcode 4.6,用作上一个参数的名称,而不是选择器的一部分

时间:2013-02-02 08:29:44

标签: iphone objective-c xcode cocoa-touch

我从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;

那么,编写这些方法的正确方法是什么?

4 个答案:

答案 0 :(得分:78)

您的第一种方法是声明选择器+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]

答案 1 :(得分:12)

如果你将这些分成几行,也许你会更容易理解?

+(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;

答案 2 :(得分:2)

有关命名Objective-C方法的建议,您应该转向Objective-C样式指南,例如Apple's coding guidelines for Cocoa。任何遵循社区惯例和Apple框架的样式指南都会建议您为方法命名,以便在方法名称中清楚地描述每个参数的用途。

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

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

请注意名称的重大更改,以指示它在程序中的作用(我假设)以及每个参数的作用。您的类方法不会向任何内容添加任何内容 - 而是返回一个新字符串。这使您的代码与其他开发人员,Apple的框架,您可能使用的其他库的代码自然融合,并极大地提高了可读性。不命名您的参数会降低可读性并使可维护性变得更加困难。

在相关的说明中,不必要的缩写(包括匈牙利表示法)是不和谐的,并且不符合风格,如果您遵循良好的命名惯例,则不需要它们,并且将生成很难维护的代码。因此,请不要将其称为vw,将其称为viewviewToShowIn。请勿将其称为strVal,将其称为valueStringsomethingSpecificallyDescribingTheNatureOfTheValueString

答案 3 :(得分:1)

这就是你应该这样做的方式

+(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

等参数添加名词描述