4

我不知道这种语法是有效的。

+ (void) methodName:(TypeObject *)typeObject1:(TypeObject *)typeObject2;

然后这样调用:

[object methodName:obj1:obj2];

我觉得它丑陋和令人不安,但它会建立。

有人可以指出我的参考资料,它解释了为什么这是有效的。

FWIW 这个代码库(继承的)充斥着草率、懒惰的东西、几十个拼写错误,看起来它是由不需要再次阅读的人格式化的。(再次感谢unrustify。)

4

1 回答 1

8

这是一个众所周知且记录在案的功能 (pdf, p. 14)

原则上,一个 Rectangle 类可以代替setOrigin:: 为第二个参数实现一个没有标签的方法,该方法将被调用如下:

[myRectangle setOrigin:30.0 :50.0]; // This is a bad example of multiple parameters

但苹果不鼓励任何人使用不带关键字的参数传递

在所有参数之前使用关键字。
- (void)sendAction:(SEL)aSelector to:(id)anObject forAllCells:(BOOL)flag;-> 对。
- (void)sendAction:(SEL)aSelector :(id)anObject :(BOOL)flag;-> 错误。

为什么它被objective-C的创造者允许,我不知道。也许这与 Smalltalk 的传统有关。

于 2012-11-21T01:46:15.893 回答