具有多个input参数的方法

我知道如何创build我自己的接受Objective-C中的input参数的方法,但我从来没有实际创build过多个input参数的方法!

从我用过的多个input参数的方法中,每个都有一个名字

第一第二第三:

看起来像

- (void)first:(NSString *)fname second:(NSString *)mname third:(NSString *)lname;

我的问题是创build自己的方法与多个input参数时,你必须创build一个名字,如第一:第二:第三,或者你可以只是有一些像C ++的地方,你有一个名称后跟一个input参数types的列表,其次是参数名称…如果我没记错的话。

 fullName:(NSString, NSString, NSString) fname, mname, lname; 

不。方法必须具有您所描述的格式:

 - (void)first:(NSString *)fname second:(NSString *)mname third:(NSString *)lname; 

您必须将参数与方法签名交错。 没关系,因为xcode具有代码完成function,它可以为您提供关于您的方法在做什么以及需要什么的很好的描述性名称。

例如

 - (void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration 

在上面的例子中,甚至没有看UIViewController的API,你可以很好地理解这个方法是如何工作的,以及它是什么。 很好的做法是把你的方法命名得很好来描述他们做了什么(如果做得好的话,它可以消除大多数评论的需要)。

你当然可以看到这样写的方法

 - (void)myMethodThatAcceptsARectangle:(float)x :(float)y :(float)w :(float)h; 

但是在使用这些参数时不会很清楚:

 [self myMethodThatAcceptsARectangle:1.0f :1.0f :1.0f :1.0f]; 

所以你应该避免这个(我添加了它,所以你不会看到这一点,并想知道发生了什么)。

 fullName:(NSString, NSString, NSString) fname, mname, lname; 

是的,你可以做这样的事情。 它会看起来像这样:

 -(void)fullName:(NSString*)fname :(NSString*)mname :(NSString*)lname 

你会这样称呼它:

 [foo fullName:first :middle :last]; 

这在很大程度上违背了Objective-C的方法名称,做这种事情的主要原因是注册你不喜欢正常的Objective-C约定,或者让自己开始你正在工作的任何项目。

另一个选项可以是可变参数 。 它们被用来提供可变数量的参数,即使每个参数都没有名称。 例如

 [NSString stringWithFormat:@"My name is %@ %@", @"John", @"Doe"]; 

这将是这样的:

 - (void)names:(NSString *)names, ...; 

实施 , 附加信息

下面是带参数的Method的一个简单例子。

 - (void)methodName:(NSString *)parameterOne methodNameContinues:(NSString *)parameterTwo; 

例如,

 -(void)showAlertMsg:(NSString *)message withTitle:(NSString *)title; 

在这里你可以看到,第二个参数有一个前缀“ withTitle ”。 我们也必须对其他参数进行同样的处理。

我可以想到一个非常好的理由使用NSDictionary传递参数。 我也相信它回答了这个问题。

您可以将所有项目放在一个NSDictionary然后解压缩它们。 这可能是有用的,如果你有一个persistenceStore NSObject你想发送一个参数列表。