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

Bla*_*man 5 objective-c

有人可以为我澄清一下:

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

- (void)setWidth:(float)width height:(float)height;
Run Code Online (Sandbox Code Playgroud)

所以在上面:

  1. 方法是例如变量
  2. 返回无效
  3. 参数#1是一个名为width的浮点数.
  4. 参数#2是一个名为height的浮点数.

但为什么它是高度的:(浮动)高度; 而不仅仅是:

- (void)setWidth: (float)width (float)height;
Run Code Online (Sandbox Code Playgroud)

bbu*_*bum 7

Objective-C 没有命名参数.它也没有"关键字参数".

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

[myObject setWidth:w height:h];
Run Code Online (Sandbox Code Playgroud)

上面的描述有效地告诉myObject将宽度设置为w,将高度设置为h.

在上面的例子中,方法的名称 - 它的选择器 - 是完全正确的setWidth:height:.不多也不少.

这一点都在Objective-C指南中进行了解释.

  • "以便产生更具描述性和可读性的代码".事实证明他们完全相反. (4认同)

Car*_*rum 2

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

[myObject setWidth:w height:h];
Run Code Online (Sandbox Code Playgroud)

您可以省略标签(第一个标签除外),因此如果您确实愿意,您可以:

-(void)setWidth:(float)width :(float)height
{
  ...
}
Run Code Online (Sandbox Code Playgroud)

并将其用作:

[myObject setWidth:w :h];
Run Code Online (Sandbox Code Playgroud)

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