我发现在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];
它会正常工作。
我的问题是我什么时候应该使用这样的语法。它与通常的声明之间有什么区别吗?
答案 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