目标C.奇怪的语法

时间:2012-08-02 08:53:07

标签: objective-c

我发现在Objective C中声明方法的方式很奇怪。

.h文件中的方法声明:

-(void)methodName:(NSString *)str, int i;

.m文件中的方法实现:

-(void)methodName:(NSString *)str, int i
{
     NSLog(@"str = %@, int = %d", str, i);
}

我可以这样称呼这个方法:

[self methodName:@"stringExample", 99];

它会正常工作。

我的问题是我什么时候应该使用这样的语法。它与通常的声明之间有什么区别吗?

2 个答案:

答案 0 :(得分:6)

如上所述here,这些参数是可选

  

采用可变数量参数的方法也是可能的,   虽然它们有点罕见。额外参数以逗号分隔   方法名称结束后。 (与冒号不同,逗号不是   被认为是名称的一部分。)在下面的例子中,虚构   makeGroup:方法传递一个必需参数(组)和三个   可选的参数:

     

[receiver makeGroup:group, memberOne, memberTwo, memberThree];

所以是的,声明与通常的声明不同。除了使用varargs方法之外,我找不到任何常规使用此类声明,其中可选参数声明为...

答案 1 :(得分:1)

声明像-(void)methodName:(NSString *)str yourInt:( int) i{...}这样的方法的目的是让它更具可读性。在llvm 4.0声明字符串之后,数组,字典......可以像其他C语言一样处理。例如,下面的两个声明都是真的:

//old style
array = [nsarray arraywithobjects:a, b, c, nil];
dict = [nsdictionary dictionarywithobjects:@[o1, o2, o3]
forkeys:@[k1, k2, k3]];
number = [nsnumber numberwithchar:'x'];
number = [nsnumber numberwithint:12345];
//new style
array = @[ a, b, c ];
dict = @{ k1 : o1, k2 : o2, k3 : o3 };
number = @'x';
number = @12345;

来自土耳其论坛的资源是here