В Obj-C возможно ли не иметь окончательного параметра после имени метода? - PullRequest
3 голосов
/ 01 августа 2011

Это было бы полезно для последовательного именования методов, например, давайте взглянем на некоторые имена методов из протокола UITableViewDataSource:

numberOfSectionsInTableView:
tableView:heightForHeaderInSection:
tableView:viewForHeaderInSection:
tableView:heightForFooterInSection:
tableView:viewForFooterInSection:
tableView:numberOfRowsInSection:
tableView:cellForRowAtIndexPath:
sectionIndexTitlesForTableView:

Обратите внимание, как первые и последние нечетны - они оба по-прежнему принимают UITableView* в качестве первого параметра, но, поскольку это единственный параметр, согласованность соглашения об именах нарушается. Было бы намного лучше, если бы их можно было назвать так:

tableView:numberOfSections
tableView:sectionIndexTitles

Можно ли определить методы, подобные этим, или подобные? Я пробовал это:

- (NSUInteger)specialView:(SpecialView*)specialView numberOfThingies;
- (NSUInteger)specialView:(SpecialView*)specialView numberOfThingies:(void)unused;

Первый вариант идеален, но вызывает ошибку в заголовочном файле. Второй не идеален (было бы лучше без двоеточия в конце), но он принят в заголовке, хотя я не могу понять, как это назвать. Я пробовал варианты:

[anObject specialView:aSpecialView numberOfThingies];
[anObject specialView:aSpecialView numberOfThingies:];
[anObject specialView:aSpecialView numberOfThingies:void];
[anObject specialView:aSpecialView numberOfThingies:(void)0];

Есть ли способ сделать то, что я хочу сделать? Существуют ли еще какие-либо разумные соглашения об именах, которые поддерживают такие методы согласованными?

Ответы [ 3 ]

6 голосов
/ 01 августа 2011

Краткий ответ: нет, это невозможно в текущей версии Objective-C. Вы можете завершить метод без двоеточия и аргумента, только если нет аргументов вообще; в противном случае любая часть имени метода должна сопровождаться аргументом.

Чтобы делать то, что вы хотите, вы должны следовать шаблону, используемому UITableView. Будет необходимо одно из следующего:

- (NSUInteger)specialViewNumberOfThingies:(SpecialView *)specialView;
- (NSUInteger)numberOfThingiesInSpecialView:(SpecialView *)specialView;
0 голосов
/ 01 августа 2011

То, что вы пытаетесь сделать, невозможно.У вас может быть функция, которая вообще не принимает аргументы, но если вы берете какие-либо аргументы, вы не можете ничего добавить после аргументов.

0 голосов
/ 01 августа 2011

Боюсь, ответ: нет .

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