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