Don';不理解objective-c中的多参数声明

Don';不理解objective-c中的多参数声明,objective-c,Objective C,有人能为我澄清一下吗: 当有多个参数时,参数将在冒号后面的方法名称中声明。 参数将名称在声明中分开,就像在消息中一样。例如: - (void)setWidth:(float)width height:(float)height; 因此,在上述情况下: 方法是一个实例变量 返回无效 参数#1是一个浮点数,名为width 参数#2是一个浮点数,名为height 但为什么它高:(浮动)高度;不仅仅是: - (void)setWidth: (float)width (float)height; 这只

有人能为我澄清一下吗:

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

- (void)setWidth:(float)width height:(float)height;
因此,在上述情况下:

  • 方法是一个实例变量
  • 返回无效
  • 参数#1是一个浮点数,名为width
  • 参数#2是一个浮点数,名为height
  • 但为什么它高:(浮动)高度;不仅仅是:

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

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

    [myObject setWidth:w height:h];
    
    您可以不使用标签(第一个标签除外),因此,如果确实需要,您可以:

    -(void)setWidth:(float)width :(float)height
    {
      ...
    }
    
    并将其用作:

    [myObject setWidth:w :h];
    

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

    参数名称恰好也在方法名称中,这一事实让您感到困惑。想想你是怎么称呼它的:

    [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
    

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


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

    [myObject setWidth:w height:h];
    
    上面的内容实际上是告诉myObject将宽度设置为w,将高度设置为h

    在上面的例子中,方法的名称——它的选择器——正好是
    setWidth:height:
    。不多也不少


    这在.

    中都有解释,只是有些混乱,在c中是:void SetWidth(int width,int height);对象设置宽度(500200);这似乎有点奇怪,所有参数似乎都不是相同的约定;对象。设置尺寸(500200);Objective-C没有“标记”参数。您不能只省略方法名称的一部分。也就是说,在上面的示例中,方法“setWidth::”与“setWidth:height:”是不同的方法(这常常会让新手感到困惑)。@bbum,绝对是的。我并不想给人留下他们是一样的印象。你对我如何澄清这一点有什么建议吗?除了“Objective-C将方法名称与参数交错以提高代码的可读性和可描述性”之外,我还没有提出一个非常好的描述。“以便生成更具描述性和可读性的代码”。结果证明他们实现了完全相反的目标。