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];
}
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 topickerView:numberOfRowsInComponent:
. Runtime Objective-C pobiera informacje o tej metodzie i wysyła je do wskazanego odbiornika. W czystym C wyglądałoby to takNSInteger 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 typuUIPickerView*
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 typuNSInteger
i ma nazwę lokalnej zmiennej komponentu.
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)
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.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 {
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