不了解objective-c中的多个参数声明

时间:2010-06-11 21:43:55

标签: objective-c

有人可以为我澄清这一点:

当有多个参数时,参数在冒号后面的方法名称中声明。 参数在声明中将名称分开,就像在消息中一样。例如:

- (void)setWidth:(float)width height:(float)height;

所以在上面:

  1. 方法是例如变量
  2. 返回void
  3. 参数#1是一个名为width的浮点数。
  4. 参数#2是一个名为height的浮点数。
  5. 但为什么它很高:(漂浮)高度;而不只是:

    - (void)setWidth: (float)width (float)height;
    

3 个答案:

答案 0 :(得分:6)

Objective-C 没有命名参数。它也没有“关键字参数”。

Objective-C使用所谓的“交错参数”。也就是说,方法的名称与参数交错,以便产生更具描述性和可读性的代码。

[myObject setWidth:w height:h];

上面有效地读取,因为告诉myObject将宽度设置为w,将高度设置为h

在上述情况下,方法的名称 - 选择器 - 正好是setWidth:height:。不多也不少。

这一点在Objective-C guide中解释。

答案 1 :(得分:2)

这只是Objective-C的一个功能,可以在阅读方法调用时让您的生活更轻松,如下所示:

[myObject setWidth:w height:h];

您可以退出标签(第一个除外),因此,如果确实想要,您可以:

-(void)setWidth:(float)width :(float)height
{
  ...
}

并将其用作:

[myObject setWidth:w :h];

但这并不符合Objective-C语言的精神。这些标签的重点是使这些调用更容易理解,而无需查找方法定义。

答案 2 :(得分:1)

参数名称恰好也出现在方法名称中这一事实让您感到困惑。想想你实际上如何称呼它:

[something setWidth:500 height:250];

根据你的建议,它会是这样的:

[something setWidth:500 250]; // That 250 is just kind of hanging 
                              // out there — not very readable

您还可以为参数赋予与其前面的方法名称部分完全不同的名称:

- (void)setGivenName:(NSString *)first surname:(NSString *)last