Ich habe einige Beiträge über die Objective-C-Methodensyntax gelesen, aber ich glaube, ich verstehe nicht mehrere Namen für eine Methode.
Ich versuche, eine Methode getBusStops
mit NSString
und NSTimeInterval
Parametern und einen Rückgabetyp von zu erstellen NSMutableArray
. So habe ich die Methode konstruiert, aber zur Laufzeit werden offensichtlich Fehler angezeigt:
- (NSMutableArray *)getBusStops:(NSString *)busStop
(NSTimeInterval *)timeInterval;
Ich habe ein anderes Beispiel mit einer Methode gesehen:
-(NSInteger)pickerView:(UIPickerView *)pickerView
numberOfRowsInComponent:(NSInteger)component
Ich verstehe nicht, warum diese Methode für jeden Parameter einen Methodennamen hat. Soll ich dasselbe mit so etwas machen wie:
- (NSMutableArray *)getBusStops:(NSString *)busStop
forTime:(NSTimeInterval *)timeInterval
forTime
verwendet wird?Ja; Die Syntax der Objective-C-Methode ist aus mehreren Gründen so. Eine davon ist, damit klar ist, welche Parameter Sie angeben. Wenn Sie beispielsweise einem Objekt
NSMutableArray
an einem bestimmten Index ein Objekt hinzufügen , gehen Sie folgendermaßen vor:Diese Methode wird aufgerufen
insertObject:atIndex:
und es ist klar, dass ein Objekt an einem angegebenen Index eingefügt wird.In der Praxis wird eine Zeichenfolge "Hallo Welt!" bei Index 5 eines
NSMutableArray
genanntarray
würde wie folgt aufgerufen werden:Dies verringert auch die Mehrdeutigkeit zwischen der Reihenfolge der Methodenparameter und stellt sicher, dass Sie zuerst den Objektparameter und dann den Indexparameter übergeben. Dies ist nützlicher, wenn Funktionen verwendet werden, die eine große Anzahl von Argumenten annehmen, und verringert den Fehler beim Übergeben der Argumente.
Darüber hinaus ist die Namenskonvention für Methoden so, da Objective-C keine Überladung unterstützt. Wenn Sie jedoch eine Methode schreiben möchten, die denselben Job ausführt, jedoch unterschiedliche Datentypen verwendet, kann dies erreicht werden. Nehmen Sie zum Beispiel die
NSNumber
Klasse; Dies hat mehrere Methoden zur Objekterstellung, einschließlich:+ (id)numberWithBool:(BOOL)value;
+ (id)numberWithFloat:(float)value;
+ (id)numberWithDouble:(double)value;
In einer Sprache wie C ++ würden Sie einfach die Zahlenmethode überladen, damit verschiedene Datentypen als Argument übergeben werden können. In Objective-C können mit dieser Syntax jedoch mehrere verschiedene Varianten derselben Funktion implementiert werden, indem der Name der Methode für jede Variante der Funktion geändert wird.
quelle
Der Text vor jedem Parameter ist Teil des Methodennamens. In Ihrem Beispiel lautet der Name der Methode tatsächlich
Jedes: repräsentiert ein Argument. Bei einem Methodenaufruf wird der Methodenname bei: s aufgeteilt und Argumente werden nach: seg angezeigt
quelle
für Erstellungsmethode:
für den Aufruf der Methode:
quelle
mich:
Wie in anderen Sprachen verwenden wir die folgende Syntax void,
add(int one, int second)
aber die Art der Zuweisung von Argumenten inOBJ_c
unterscheidet sich wie oben beschriebenquelle