我如何定义Objective-C方法参数的混合?

时间:2011-03-13 08:02:25

标签: objective-c

我想在我的程序中做这样的事情:

[obj list error:&error];

但是当我尝试定义原型/方法时,我遇到了编译错误。

我尝试了以下定义:

-(void)list error:(NSError **)error;

-(void)list:() error:(NSError **)error;
似乎没什么用。

1 个答案:

答案 0 :(得分:2)

为什么方法签名中listerror之间的空格。如果这是原型 -

-(void) list_error:(NSError **)error;

list_error期望将指针地址传递给它。所以,这应该有效。

[obj list_error:&ptr] ; // Assuming ptr is of type NSError* and is initialized.

我认为,当您向方法发送多个参数时,您会感到困惑。这很简单。方法签名应为 -

- (return_type)splitOne :( type)arg1 splitTwo :( type)arg2;

-表示实例方法。类方法的情况也是如此,但替换为+而不是-。等方法名称可以拆分。

以分数为例,设置分数需要分子和分母。所以,

-(void) setNumerator: (int) n setDenominator: (int) d ; 

并称之为 -

[ obj setNumerator:10 setDenominator:20 ] ;

拆分方法名称需要什么?

通常,在C中,此函数原型将是 -

void setFraction( int a, int b );

但是在看原型时,a是分子还是分母并且与b相同并不明显。这就是为什么 Objective-C 方法名称可能分成部分的原因。在 Objective-C 的上述示例中,setNumeratorsetDenominator都形成了方法名称。在调用时,对用户来说很明显,传递的参数是什么。希望它有助于解决您的问题。