Что означает следующий синтаксис? (вызов метода стиля target-c) - PullRequest
0 голосов
/ 26 февраля 2012

Я новичок в target-c (из C # / фона Java), и мне трудно понять синтаксис target-c, который используется в Picker View control (а также другие методы, которые нам нужно реализовать для использования Picker View):

-(NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row 
             forComponent:(NSInteger)component

Чтобы понять, я попытался сопоставить его со следующим синтаксисом, но, похоже, он совершенно другой.

-(NSString *)MethodName: (UIPickerView *)FirstParam and:(NSInteger)SecondParam 
             and:(NSInteger)ThirdParam

Может ли кто-то разложить части идай объяснение, пожалуйста?

Ответы [ 4 ]

7 голосов
/ 26 февраля 2012

Это метод с именем

pickerView:titleForRow:forComponent:

Возвращает указатель на NSString и требует параметры типов UIPickerView *, NSInteger и NSInteger.

Объявление Java-подобного метода может выглядеть так:

NSString pickerViewTitleForRowForComponent(UIPickerView pickerView, NSInteger row, NSInteger component)

5 голосов
/ 26 февраля 2012

Разница в том, что в Objective-C имя метода состоит из частей, а не одной строки, как в Java.

- (NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row ...
/*    ^           ^             ^            ^          ^            
      |           |             |            |          |            
  Return Type     |       Argument Type      | 2nd part of m. name     etc....
                  |                          |
         Part of method name           Argument Name
*/
2 голосов
/ 26 февраля 2012

... erik aligner и bdares ответы объясняют все

еще одна вещь:

"-" минус буква в начале означает, что вы можете вызвать этот метод с экземпляром класса. в этом случае метод вызывается самим pickerView (вы не вызываете его, вы просто реализуете его в классе, который принимает протокол UIPickerViewDelegate / означает, что он использует все методы, требуемые этим протоколом)

но в общем случае методы, начинающиеся со знака минус, должны вызываться в экземплярах. например, метод

- (void)addSubview:(UIView *)view

объявленный в UIViewClass, должен называться следующим образом:

[yourUIViewInstance addSubview:yourSubViewInstance];

в то время как методы, объявленные со знаком плюс "+", означают, что вам нужно вызывать их не для экземпляра (у вас вообще может быть выделен ни один экземпляр), а для самого класса

например, для метода UIView

+ (void)setAnimationDelay:(NSTimeInterval)delay

Вы должны назвать это так:

[UIView setAnimationDelay:1.0];
1 голос
/ 26 февраля 2012

Имя метода (селектор) - это все три компонента: pickerView:titleForRow:forComponent:.Кроме того, у вас все в порядке.(Да, аргументы и сегменты селектора смешиваются вместе в Objective-C. Это одна из его сильных сторон; это помогает удобочитаемости длинных выражений сообщений.)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...