Как передать несколько параметров в Objective-C?
Я прочитал несколько сообщений о синтаксисе метода Objective-C, но, я думаю, я не понимаю нескольких имен для метода.
Я пытаюсь создать метод getBusStops
с параметрами NSString
и NSTimeInterval
и тип возврата NSMutableArray
. Вот как я построил метод, но он явно получает ошибки во время выполнения:
- (NSMutableArray *)getBusStops:(NSString *)busStop
(NSTimeInterval *)timeInterval;
Я видел еще один пример с помощью метода:
-(NSInteger)pickerView:(UIPickerView *)pickerView
numberOfRowsInComponent:(NSInteger)component
Я не понимаю, почему этот метод имеет имя метода для каждого параметра. Должен ли я сделать то же самое с чем-то вроде:
- (NSMutableArray *)getBusStops:(NSString *)busStop
forTime:(NSTimeInterval *)timeInterval
Ответы
Ответ 1
Objective-C не имеет именованных параметров, поэтому все в левой части двоеточия является частью имени метода. Например,
getBusStops: forTime:
- это имя метода. Имя разбивается, поэтому оно может быть более наглядным. Вы можете просто назвать свой метод
getBusStops: :
но это не говорит о втором параметре.
Ответ 2
Вам нужно разграничить каждое имя параметра как минимум: ":". Технически это имя необязательно, но рекомендуется для удобства чтения. Поэтому вы можете написать:
- (NSMutableArray*)getBusStops:(NSString*)busStop :(NSSTimeInterval*)timeInterval;
или что вы предложили:
- (NSMutableArray*)getBusStops:(NSString*)busStop forTime:(NSSTimeInterval*)timeInterval;
Ответ 3
Да; синтаксис Objective-C подобен этому по нескольким причинам; одним из них является то, что ясно, какие параметры вы указываете. Например, если вы добавляете объект к NSMutableArray
по определенному индексу, вы должны сделать это с помощью метода:
- (void)insertObject:(id)anObject atIndex:(NSUInteger)index;
Этот метод называется insertObject:atIndex:
, и ясно, что объект вставляется в указанный индекс.
На практике добавление строки "Hello, World!" при индексе 5 NSMutableArray
, называемом array
, будет вызываться следующим образом:
NSString *obj = @"Hello, World!";
int index = 5;
[array insertObject:obj atIndex:index];
Это также уменьшает двусмысленность между порядком параметров метода, гарантируя, что вы сначала передаете параметр объекта, а затем индексный параметр. Это становится более полезным при использовании функций, которые принимают большое количество аргументов, и уменьшает ошибку при передаче аргументов.
Кроме того, соглашение об именах методов таково, потому что Objective-C не поддерживает перегрузку; однако, если вы хотите написать метод, который выполняет ту же работу, но использует разные типы данных, это может быть выполнено; возьмите, например, класс NSNumber
; это имеет несколько методов создания объектов, в том числе:
-
+ (id)numberWithBool:(BOOL)value;
-
+ (id)numberWithFloat:(float)value;
-
+ (id)numberWithDouble:(double)value;
На языке, таком как С++, вы просто перегрузите метод number, чтобы разрешить передавать разные типы данных в качестве аргумента; однако в Objective-C этот синтаксис позволяет реализовать несколько различных вариантов одной и той же функции, изменив имя метода для каждого варианта функции.
Ответ 4
Текст перед каждым параметром часть имени метода. В вашем примере имя метода действительно
-getBusStops:forTime:
Каждый: представляет собой аргумент. В вызове метода имя метода разбивается на: s, и аргументы появляются после: s. например.
[getBusStops: arg1 forTime: arg2]
Ответ 5
для метода create:
-(void)mymethods:(NSString *)aCont withsecond:(NSString *)a-second { }
для вызова метода:
[mymethod:self.contoCorrente withsecond:self.asecond];
Ответ 6
(int) add: (int) numberOne plus: (int) numberTwo ;
(returnType) functionPrimaryName : (returnTypeOfArgumentOne) argumentName functionSecondaryNa
меня:
(returnTypeOfSecontArgument) secondArgumentName ;
как и на других языках, мы используем следующий синтаксис
void add(int one, int second)
но способ назначения аргументов в OBJ_c
отличается, как описано выше