Я прочитал несколько постов о синтаксисе метода 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
forTime
используется?Да; синтаксис метода Objective C подобен этому по нескольким причинам; один из них заключается в том, чтобы было ясно, какие параметры вы указываете. Например, если вы добавляете объект
NSMutableArray
в определенный индекс, вы должны сделать это с помощью метода:Этот метод называется
insertObject:atIndex:
и становится ясно, что объект вставляется по указанному индексу.На практике добавляем строку "Hello, World!" по индексу 5
NSMutableArray
вызываемогоarray
будет вызываться следующим образом:Это также уменьшает неоднозначность между порядком параметров метода, гарантируя, что вы сначала передадите параметр объекта, а затем параметр индекса. Это становится более полезным при использовании функций, которые принимают большое количество аргументов, и уменьшает ошибку при передаче аргументов.
Кроме того, соглашение об именовании методов таково, потому что Objective-C не поддерживает перегрузку; однако, если вы хотите написать метод, который выполняет ту же работу, но принимает разные типы данных, это можно сделать; возьмите, например,
NSNumber
класс; у этого есть несколько методов создания объекта, включая:+ (id)numberWithBool:(BOOL)value;
+ (id)numberWithFloat:(float)value;
+ (id)numberWithDouble:(double)value;
В таком языке, как C ++, вы просто перегружаете числовой метод, чтобы разрешить передачу разных типов данных в качестве аргумента; однако в Objective-C этот синтаксис позволяет реализовать несколько различных вариантов одной и той же функции, изменяя имя метода для каждого варианта функции.
источник
Текст перед каждым параметром является частью имени метода. Из вашего примера название метода на самом деле
Каждый: представляет аргумент. При вызове метода имя метода разделяется на: s, а аргументы появляются после: seg
источник
для создания метода:
для вызова метода:
источник
меня:
как и в других языках, мы используем следующий синтаксис void,
add(int one, int second)
но способ назначения аргументовOBJ_c
отличается, как описано вышеисточник