Eu li vários posts sobre a syntax do método Objective-C, mas acho que não entendo vários nomes para um método.
Eu estou tentando criar um método chamado getBusStops
com NSString
e NSTimeInterval
parâmetros e um tipo de retorno de NSMutableArray
. É assim que eu construí o método, mas obviamente ele recebe erros em tempo de execução:
- (NSMutableArray *)getBusStops:(NSString *)busStop (NSTimeInterval *)timeInterval;
Eu vi outro exemplo com um método:
-(NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component
Eu não entendo porque este método tem um nome de método para cada parâmetro. Devo fazer o mesmo com algo como:
- (NSMutableArray *)getBusStops:(NSString *)busStop forTime:(NSTimeInterval *)timeInterval
Objetivo-C não tem parâmetros nomeados, então tudo no lado esquerdo de dois-pontos faz parte do nome do método. Por exemplo,
getBusStops: forTime:
é o nome do método. O nome é quebrado para poder ser mais descritivo. Você poderia simplesmente nomear seu método
getBusStops: :
mas isso não diz muito sobre o segundo parâmetro.
Você precisa delimitar cada nome de parâmetro com um “:” no mínimo. Tecnicamente, o nome é opcional, mas é recomendado para facilitar a leitura. Então você poderia escrever:
- (NSMutableArray*)getBusStops:(NSString*)busStop :(NSSTimeInterval*)timeInterval;
ou o que você sugeriu:
- (NSMutableArray*)getBusStops:(NSString*)busStop forTime:(NSSTimeInterval*)timeInterval;
Sim; a syntax do método Objective-C é assim por alguns motivos; um deles é para que fique claro quais são os parâmetros que você está especificando. Por exemplo, se você estiver adicionando um object a um NSMutableArray
em um determinado índice, você o faria usando o método:
- (void)insertObject:(id)anObject atIndex:(NSUInteger)index;
Esse método é chamado de insertObject:atIndex:
e fica claro que um object está sendo inserido em um índice especificado.
Na prática, adicionar uma string “Hello, World!” no índice 5 de um array
chamado NSMutableArray
seria chamado da seguinte forma:
NSString *obj = @"Hello, World!"; int index = 5; [array insertObject:obj atIndex:index];
Isso também reduz a ambigüidade entre a ordem dos parâmetros do método, garantindo que você passe primeiro o parâmetro do object e depois o parâmetro index. Isso se torna mais útil ao usar funções que recebem um grande número de argumentos e reduz o erro ao passar os argumentos.
Além disso, a convenção de nomenclatura do método é tal porque o Objective-C não suporta sobrecarga; entretanto, se você quiser escrever um método que faça o mesmo trabalho, mas tenha diferentes tipos de dados, isso pode ser feito; tome, por exemplo, a class NSNumber
; isso tem vários methods de criação de objects, incluindo:
+ (id)numberWithBool:(BOOL)value;
+ (id)numberWithFloat:(float)value;
+ (id)numberWithDouble:(double)value;
Em uma linguagem como C ++, você simplesmente sobrecarregaria o método numérico para permitir que diferentes tipos de dados fossem passados como argumento; no entanto, em Objective-C, essa syntax permite que várias variantes diferentes da mesma function sejam implementadas, alterando o nome do método para cada variante da function.
O texto antes de cada parâmetro faz parte do nome do método. Do seu exemplo, o nome do método é realmente
-getBusStops:forTime:
Cada um: representa um argumento. Em uma chamada de método, o nome do método é dividido em: s e os argumentos aparecem após o: seg
[getBusStops: arg1 forTime: arg2]
para o método de criação:
-(void)mymethods:(NSString *)aCont withsecond:(NSString *)a-second { //method definition... }
para chamar o método:
[mymethods:self.contoCorrente withsecond:self.asecond];
(int) add: (int) numberOne plus: (int) numberTwo ; (returnType) functionPrimaryName : (returnTypeOfArgumentOne) argumentName functionSecondaryNa
mim:
(returnTypeOfSecontArgument) secondArgumentName ;
como em outras linguagens usamos a seguinte syntax void add(int one, int second)
mas a maneira de atribuir argumentos no OBJ_c
é diferente como descrito acima