Objective-C如何实现多参数输入呢?

先复习一下objc怎么传递参数,例如:

[objc] //声明部分 -(void)setNumerator:(int)n;

//测试部分 [myFraction setNumerator:1]; [/objc]

通过方法名后面跟上冒号,表示接受的参数。

带参数名的方法

如果要实现多个参数传递呢?我们可以通过下面的方式实现:

[objc] [instance setX:(int)x andY:(int)y]; [/objc]

这种感觉。

我们看一个具体的例子:

接口文件:Fraction.h

[objc] #import Foundation/Foundation.h

@interface Fraction:NSObject

@property int numerator,denominator; -(void)print; -(void)setTo:(int)n over:(int)d; -(double)convertToNum;

@end [/objc]

然后,在实现文件中添加新方法定义。

实现文件:Fraction.m

[objc] #import "Fraction.h"

@implementation Fraction @synthesize numerator,denominator; -(void)print { NSLog(@"%i/%i",numerator,denominator); } -(double)convertToNum { if(denominator!=0) return (double)numerator/denominator; else return 1.0; } -(void)setTo:(int)n over:(int)d { numerator = n; denominator = d; } @end [/objc]

setTo: over:方法接受两个整型参数,n和d,并把他们赋值给该分数对应的域numerator和denominator。

关于setTo: over这个方法名称,可以按自己的喜好定义。一般来说应该可读性强,让人一眼就能知道这个方法是含义,比如这个方法还可以这样写setNumerator:(int)n andDenominator:(int)d,可以根据自己的习惯去命名。

测试程序:main.m

[objc] #import "Fraction.h"

int main(int argc,char* argv[]) { NSAutoreleasePool pool = [[NSAutoreleasePool alloc] init]; Fraction aFraction = [[Fraction alloc] init]; [aFraction setTo:100 over:200]; [aFraction print]; [aFraction setTo:1 over:3]; [aFraction print]; [aFraction release]; [pool drain]; return 0; } [/objc]

代码输出结果:

[objc] 100/200 1/3 [/objc]

不带参数名的方法

创建方法名时,参数名实际上是可选的。例如,可以如下声明一个方法:

[objc] -(int) set:(int)n (int)d; [/objc]

注意,这和之前的例子不同,这个方法的第二个参数没有名字,这个方法名为set:,两个冒号表示这个方法有两个参数,索然没有全部命名。

要调用set:方法,可以使用冒号作为参数的分隔符,如下所示:

[objc] [aFraction set: 1: 3]; [/objc]

在编写新方法时,省略参数名不是一种好的变成风格,因为它使程序很难读懂并且很不直观,特别是当使用方法参数特别重要时更是如此。