Ответ 1
Нет. Метод должен иметь формат, который вы описали:
- (void)first:(NSString *)fname second:(NSString *)mname third:(NSString *)lname;
Я понимаю, как создавать свои собственные методы, которые принимают входные параметры в objective-c, но я никогда не создавал метод с несколькими входными параметрами!
Из методов, которые я использовал с несколькими входными параметрами, у каждого есть имя по строкам
первая: вторая: третья:
и выглядите как
- (void)first:(NSString *)fname second:(NSString *)mname third:(NSString *)lname;
Мой вопрос заключается в том, что при создании собственного метода с несколькими входными параметрами вам нужно создать имя наподобие first: second: third или вы можете просто иметь что-то вроде С++, где у вас есть одно имя, за которым следует список типов входных параметров а затем имена параметров... если я правильно помню.
fullName:(NSString, NSString, NSString) fname, mname, lname;
Нет. Метод должен иметь формат, который вы описали:
- (void)first:(NSString *)fname second:(NSString *)mname third:(NSString *)lname;
Вы должны иметь параметры, чередующиеся с сигнатурой метода. Это нормально, потому что xcode имеет завершение кода, и он может дать вам приятные описательные имена о том, что делает ваш метод и что он требует.
например.
- (void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration
В приведенном выше примере, даже не глядя на API для UIViewController, вы можете получить довольно хорошее представление о том, как работает этот метод и каковы его параметры. Это хорошая практика, чтобы назвать ваши методы хорошо, чтобы описать, что они делают (это может устранить необходимость в большинстве комментариев, если все будет хорошо).
Возможно, вы, конечно, увидите метод, написанный следующим образом
- (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, ...;
Вот простой пример для метода с параметрами.
- (void)methodName:(NSString *)parameterOne methodNameContinues:(NSString *)parameterTwo;
Например,
-(void)showAlertMsg:(NSString *)message withTitle:(NSString *)title;
Здесь вы можете увидеть, у нас есть префикс " с титром" для второго параметра. Мы должны продолжить то же самое для других параметров.
Я могу думать о совершенно хорошей причине использовать NSDictionary для передачи аргументов. Я также считаю, что он отвечает на вопрос.
Вы можете поместить все предметы в NSDictionary, а затем распаковать их. Это может быть полезно, если вы скажете файл persitanceStore NSObject, в который вы хотите отправить список параметров.