Składnia metody w Objective C

Może mi ktoś wyjaśnić składnię deklaracji tej metody? W tej funkcji zwracana jest liczba wierszy UIPickerView (UI automatu na iPhonie). Z tego co wiem, metoda nazywa się 'pickerView ' i zwraca NSInteger.

Przechodzi w wskaźniku do interfejsu UIPickerview o nazwie " pickerView"... po pierwsze, dlaczego metoda jest nazywana tą samą nazwą co parametr?

Następnie jest parametr nsinteger o nazwie komponent, który mówi nam, który składnik jesteśmy liczenie wierszy dla. Logika decydowania, który jest w ciele metody.

Co to jest " numberOfRowsInComponent? Wydaje się, że opisuje wartość, którą zwracamy, ale znajduje się w środku parametrów.

- (NSInteger) pickerView:(UIPickerView *)pickerView 
 numberOfRowsInComponent:(NSInteger)component
{
    if (component == kStateComponent)
        return [self.states count];

    return[self.zips count];
}
Author: epatel, 2009-03-25

4 answers

Metody Objective-C są zaprojektowane tak, aby były samodzielnym dokumentowaniem i czerpią z bogatej tradycji Smalltalka.

Postaram się wyjaśnić, co tu masz, -(NSInteger) pickerView:(UIPickerView*)pickerView numberOfRowsInComponent:(NSInteger)component.

  • - (NSInteger)
    Ta pierwsza część wskazuje, że jest to Objective C instancja metoda, która zwraca obiekt NSInteger. - (dash) wskazuje, że jest to metoda instancja , gdzie + wskazuje, że jest to metoda klasy . Pierwsza wartość w nawias jest typem zwrotnym metody.

  • pickerView:
    Ta część jest częścią nazwa wiadomości . pełna nazwa wiadomości w tym przypadku to pickerView:numberOfRowsInComponent:. Runtime Objective-C pobiera informacje o tej metodzie i wysyła je do wskazanego odbiornika. W czystym C wyglądałoby to tak
    NSInteger pickerView(UIPickerView* pickerView, NSInteger component). Ponieważ Jednak jest to Objective-C, dodatkowe informacje są pakowane do nazwy wiadomości.

  • (UIPickerView*)pickerView
    Ta część jest częścią input . Wejście jest typu UIPickerView* i ma lokalną nazwę zmiennej pickerView.

  • numberOfRowsInComponent:
    Ta część jest drugą częścią nazwa wiadomości . Jak widać tutaj, nazwy wiadomości są podzielone, aby pomóc wskazać, jakie informacje PRZEKAZUJESZ do odbiorcy. Tak więc, gdybym miał przesłać obiekt myObject ze zmiennymi foo i bar, wpisałbym:
    [myObject pickerView:foo numberOfRowsInComponent:bar];
    w przeciwieństwie do C++ styl:
    myObject.pickerView(foo, bar);.

  • (NSInteger)component
    Jest to ostatnia część wejścia . wejście jest typu NSInteger i ma nazwę lokalnej zmiennej komponentu.

 356
Author: locriani,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-04-09 08:14:59

W Objective-C, nazwa metody składa się ze wszystkich części deklaracji, które nie są argumentami i typami. Dlatego nazwa tej metody brzmiałaby:

pickerView:numberOfRowsInComponent:

Metoda byłaby równoważna funkcji w stylu C, która wyglądała następująco:

edit: (dzięki Jarret Hardie):

NSInteger pickerViewNumberOfRowsInComponent(UIPickerView * pickerView, NSInteger component)
 51
Author: e.James,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 12:03:03

Dodając do poprzednich odpowiedzi, chciałbym powiedzieć, że metody Objective-C (lub komunikaty, jeśli wolisz) mają zewnętrzne i wewnętrzne nazwy parametrów.

Więc w tym przypadku:

- (NSInteger) pickerView:(UIPickerView *)pickerView 
 numberOfRowsInComponent:(NSInteger)component

Numerofrowsincomponent to external nazwa, którą można użyć podczas wywoływania tej metody z zewnątrz.

And component jest wewnętrzną nazwą parametru-nazwa, której używasz do odwoływania się do parametru z wewnątrz metody.

Mam nadzieję, że to wszystko wyjaśni.
 26
Author: Karolis,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-04-02 17:26:33

Wydaje mi się, że podpisy metody Objective-C są bardziej jak zdania. Każdy parametr zasługuje na Część w nazwie metody. Na przykład, w C możemy mieć metodę (setPersonData ) do ustawiania informacji o osobie:

void setPersonData( char* name, int age, float height ) {

I w Objective-C metoda byłaby bardziej opisowa (setPersonName:andAge:andHeight: ), Jak

- (void) setPersonName: (char *)name andAge:(int)age andHeight:(float)height {
 20
Author: wilczarz,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-11-11 19:42:13