Как передать несколько параметров в 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 отличается, как описано выше