Как передать несколько параметров в 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
6   161  

6 ответа:

Objective-C не имеет именованных параметров, поэтому все, что находится в левой части двоеточия, является частью имени метода. Например,

getBusStops: forTime:

- это имя метода. Имя разбито, поэтому оно может быть более описательным. Вы можете просто назвать свой метод

getBusStops: :

но это не говорит вам много о втором параметре.

вы должны отделить каждое имя параметра с": "по крайней мере. Технически имя является необязательным, но рекомендуется для удобства чтения. Так что вы могли бы написать:

- (NSMutableArray*)getBusStops:(NSString*)busStop :(NSSTimeInterval*)timeInterval;

или то, что вы предложили:

- (NSMutableArray*)getBusStops:(NSString*)busStop forTime:(NSSTimeInterval*)timeInterval;

да; синтаксис метода Objective-C подобен этому по нескольким причинам; одна из них заключается в том, что ясно, какие параметры вы указываете. Например, если вы добавляете объект в NSMutableArray при определенном индексе, вы бы сделали это с помощью метода:

- (void)insertObject:(id)anObject atIndex:(NSUInteger)index;

этот метод называется insertObject:atIndex: и понятно, что объект вставляется по указанному индексу.

на практике, добавив строку "Привет, Мир!"при индексе 5 из NSMutableArray называется array будет называться следующим образом:

NSString *obj = @"Hello, World!";
int index = 5;

[array insertObject:obj atIndex:index];

это также уменьшает неоднозначность между порядком параметров метода, гарантируя, что вы сначала передадите параметр объекта,затем параметр Index. Это становится более полезным при использовании функций, которые принимают большое количество аргументов, и уменьшает ошибку при передаче аргументов.

кроме того, соглашение об именовании метода таково, потому что Objective-C не поддерживает перегрузку; однако, если вы хотите написать метод, который выполняет ту же работу, но принимает разные типы данных, это может быть выполнено; возьмите, например,NSNumber класс; это имеет несколько методов создания объектов, в том числе:

  • + (id)numberWithBool:(BOOL)value;
  • + (id)numberWithFloat:(float)value;
  • + (id)numberWithDouble:(double)value;

в языке, таком как C++, вы просто перегружаете метод number, чтобы разрешить передачу различных типов данных в качестве аргумента; однако в Objective-C этот синтаксис позволяет несколько разных вариантов одной и той же функции должны быть реализованы путем изменения имени метода для каждого варианта функции.

текст перед каждым параметром часть имя метода. Из вашего примера, имя метода, на самом деле

-getBusStops:forTime:

каждый: представляет аргумент. В вызове метода имя метода разбивается на :s и аргументы появляются после :s. например

[getBusStops: arg1 forTime: arg2]

для создания метода:

-(void)mymethods:(NSString *)aCont withsecond:(NSString *)a-second {
//method definition...
}

для вызова метода:

[mymethods:self.contoCorrente withsecond:self.asecond];
(int) add: (int) numberOne plus: (int) numberTwo ;
(returnType) functionPrimaryName : (returnTypeOfArgumentOne) argumentName functionSecondaryNa

Я:

(returnTypeOfSecontArgument) secondArgumentName ;

как и в других языках, мы используем следующий синтаксис пустота add(int one, int second) но способ назначения аргументов в OBJ_c - разному, как описано выше