Ich habe eine Klasse namens ABCCalendarView
. Es erfordert eine NSCalendar
und ruft dieses Objekt von seinem Stellvertreter ab. Ich versuche herauszufinden, wie diese Delegate-Methode bezeichnet werden soll, und ich möchte mich den Best Practices des Cocoa-Frameworks anpassen.Richtige Namenskonvention für eine Delegate-Methode ohne Argumente außer dem delegierenden Objekt?
Nach the 'Naming Methods' section of Apple's 'Coding Guidelines for Cocoa', sollte ich:
Starten Sie den Namen mit der Klasse des Objekts zu identifizieren, der die Nachricht schickt:
- (BOOL)tableView:(NSTableView *)tableView shouldSelectRow:(int)row; - (BOOL)application:(NSApplication *)sender openFile:(NSString *)filename;
Der Klassenname lässt das Präfix und die Der erste Buchstabe steht in Kleinbuchstaben.
Ein Doppelpunkt wird an den Klassennamen angehängt (das Argument ist eine Referenz auf das delegierende Objekt), es sei denn, die Methode hat nur ein Argument, den Absender.
- (BOOL)applicationOpenUntitledFile:(NSApplication *)sender;
Dies würde darauf hindeuten ich die Methode nennen sollte:
- (NSCalendar *)calendarViewUsesCalendar:(ABCCalendarView *)calendarView;
jedoch auf konkrete Beispiele für diese Situation im Rahmen Cocoa suchen, kann ich sehen, dass die tatsächliche verwendete Konvention scheint in diesem Fall den Klassennamen am Ende des Methodennamens zu setzen. Zum Beispiel:
// UITableViewDataSource has the method:
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
// UITableViewDelegate has:
- (NSIndexPath *)indexPathForPreferredFocusedViewInTableView:(UITableView *)tableView
// UIScrollView has:
- (UIView *)viewForZoomingInScrollView:(UIScrollView *)scrollView
Wenn ich an diese Konvention, die ich würde vorschlagen, sollte meine Methode aufrufen:
- (NSCalendar *)calendarForCalendarView:(ABCCalendarView *)calendarView;
Warum gibt es scheinbar eine Diskrepanz zwischen Apples Richtlinien und was sie tatsächlich getan haben? Und welcher Konvention sollte man bei der Erstellung einer Delegate-Methode folgen, die im Grunde nur eine Eigenschaft des aufrufenden Objekts setzt?
Meinten Sie für Ihre "Vorher" und "Nachher" vorgeschlagenen Methodensignaturen anders zu sein? Im Moment sind sie beide "calendarViewUsesCalendar:". Ich würde wahrscheinlich die Methode so etwas nennen wie '- (NSCalendar) calendarForCalendarView: (ABCCalendarView *) aCalendarView;' .... – NSGod
+1 @NSGod Sogar da könnte es Vorteile geben, Delegate-Methoden zu erkennen, indem man einen Klassennamen ganz am Anfang hat, Lesbarkeit trifft alles. (Und "For" ist bei weitem besser als 'Uses'). BTW: Ich wollte in einem solchen Fall viele Jahre lang Methodenname-Präfixe haben. –
-präfixe + suffixe –