我理解如何创建自己的方法来接受objective-c中的输入参数,但我从未真正创建过具有多个输入参数的方法!
从我使用多个输入参数的方法开始,每个参数的名称都是
第一名:第二名:第三名:
看起来像
- (void)first:(NSString *)fname second:(NSString *)mname third:(NSString *)lname;
我的问题是在使用多个输入参数创建自己的方法时,你必须创建一个名称,如第一个:第二个:或者你可以只有像C ++这样的东西,你有一个名字后跟一个输入参数类型列表接下来是参数名称...如果我没记错的话。
fullName:(NSString, NSString, NSString) fname, mname, lname;
答案 0 :(得分:57)
没有。方法必须具有您所描述的格式:
- (void)first:(NSString *)fname second:(NSString *)mname third:(NSString *)lname;
答案 1 :(得分:26)
您必须将参数与方法签名交错。没关系,因为xcode有代码完成,它可以为你提供关于你的方法正在做什么以及它需要什么的很好的描述性名称。
e.g。
- (void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration
在上面的例子中,甚至没有查看UIViewController的API,你可以很好地理解这个方法是如何工作的以及它的params是什么。优秀的做法是很好地命名您的方法以描述它们的作用(如果做得好,它可以消除大多数评论的需要)。
你当然可以看到这样写的方法
- (void)myMethodThatAcceptsARectangle:(float)x :(float)y :(float)w :(float)h;
但是这些参数与参数的关系并不十分清楚:
[self myMethodThatAcceptsARectangle:1.0f :1.0f :1.0f :1.0f];
所以你应该避免这种情况(我添加了它,因为你看到了这一点,并想知道发生了什么)。
答案 2 :(得分:20)
fullName:(NSString, NSString, NSString) fname, mname, lname;
是的,你可以做那样的事情。它看起来像这样:
-(void)fullName:(NSString*)fname :(NSString*)mname :(NSString*)lname
你会这样称呼它:
[foo fullName:first :middle :last];
这在很大程度上违背了Objective-C方法名称的要点,而做这样的事情的主要原因是注册你不喜欢正常的Objective-C约定,或者也许是为了让你自己开始你的任何项目'重新开始工作。
答案 3 :(得分:3)
另一个选项可能是可变参数。它们用于提供可变数量的参数,即使您不会在每个参数上都有名称。 e.g。
[NSString stringWithFormat:@"My name is %@ %@", @"John", @"Doe"];
这将是这样的:
- (void)names:(NSString *)names, ...;
答案 4 :(得分:1)
以下是带参数的方法的简单示例。
- (void)methodName:(NSString *)parameterOne methodNameContinues:(NSString *)parameterTwo;
例如,
-(void)showAlertMsg:(NSString *)message withTitle:(NSString *)title;
在这里你可以看到,我们为第二个参数设置了前缀“ withTitle ”。我们也要对其他参数进行相同的处理。
答案 5 :(得分:-6)
我可以想到使用NSDictionary传递参数的完美理由。我也相信它回答了这个问题。
您可以将所有项目放在NSDictionary中,然后将其解压缩。如果你想要一个你想要发送参数列表的persitanceStore NSObject,这可能很有用。