使用多参数的方法

时间:2010-02-07 18:11:21

标签: objective-c

我是一个客观的新手 - 我正在观看这个视频,那家伙正在谈论方法中的mutli参数设置。我来自php和许多其他语言的背景。我过去研究过c,所有语言的基础语言基本相同。

在这样的方法中:

- (void) setTo: (int) n over: (int) d {
....
}

用另一种语言看起来怎么样? 如果这是C,这个方法会这样写吗?

void function setTo(int n, int d) {
..
}

然后我不明白它是什么以及它的目的是什么。 这令人困惑。我能理解这种语言的唯一方法就是将它与另一种语言进行比较。

2 个答案:

答案 0 :(得分:0)

在Objective-C中,方法名称在其中间抛出了参数。我会说- (void)setTo:(int)n over:(int)d,一个好的类似C函数是void function setTo_over_(int n, int d)

我添加了下划线和单词“over”,因为参数的放置和单词“over”是方法名称的一部分。方法的名称实际上是setTo:over:。 “setTo”只是方法名称的前半部分。

当您执行类似colorWithRed:1.0 green:0.5 blue:0.7之类的操作时,这非常有用。在C中,这将是colorWithRed_green_blue_(1.0, 0.5, 0.7),并且有点难以分辨哪个数字是哪个。由于Objective-C能够将参数放在方法名称的中间,我们可以清楚地看到哪个数字是颜色的哪个组成部分。

(更糟糕的是,因为下划线看起来很有趣,而且仅仅因为惯例,C函数可能更像color(1.0, 0.5, 0.7),现在我们只是完全混淆了。也就是说,我们通常使用的是什么Objective-C的方法中间参数是伪造的“命名参数”。)

你应该看看Cocoa Style for Objective-C, Part I。它详细解释了命名方法时的好样式,以及Objective-C方法和C函数之间的一些比较。

答案 1 :(得分:-1)

我刚刚开始学习Objective-C,今天我遇到了完全相同的问题。结果是“over”是参数d的标签,所以要调用你要编写的方法:

[object setTo: 1 over: 2]

你可以省略它,但这被认为是不好的风格:

-(void) setTo: (int) n : (int) d
...
[object setTo: 1 :2]

在第二种情况下,“2”指的是什么?拥有标签使其更加清晰。

请记住标签是方法名称的一部分,因此上述两种方法实际上是不同的方法。希望这有帮助!