Объясните мне подпись метода obj-c - PullRequest
0 голосов
/ 04 января 2012
- (NSInteger) tableView: (UITableView *) tableView numberOfRowsInSection: (NSInteger) section

Мне довольно удобно с obj-c, но я не понимаю сигнатуру этого метода. В частности, почему этот метод имеет все эти дополнительные вещи перед именем метода, и что это значит. Как я понял, что - является методом экземпляра, а тип возвращаемого значения NSInteger

но почему tableView: (UITableView *) tableView перед именем метода?

Почему некоторые методы экземпляра для протокола UITableViewDataSource не имеют ничего общего с именем? numberOfSectionsInTableView определяется по-другому.

Может кто-нибудь объяснить это мне?

Ответы [ 2 ]

9 голосов
/ 04 января 2012

Позволяет разбить его на части:

-

Это означает, что это метод экземпляра. Альтернатива - +, что означает метод класса.

(NSInteger)

Это тип возвращаемого значения метода. В данном случае это NSInteger.

tableView:

Первый компонент имени селектора (то есть, полностью, tableView:numberOfRowsInSection:). : указывает, что параметр следует.

(UITableView *)

Тип параметра.

tableView

Название параметра. Это в значительной степени не имеет значения в сигнатуре метода (кроме как для подсказки читателю относительно цели), но в реализации это переменная, которая связана с этим параметром.

numberOfRowsInSection:

Следующий компонент имени селектора.

(NSInteger)

Тип второго параметра.

section

Имя второго параметра.


Обратите внимание, что во всей этой строке требуется только один пробел между tableView и numberOfRowsInSection:. Все остальные пространства могут быть выбраны для производства

-(NSInteger)tableView:(UITableView*)tableView numberOfRowsInSection:(NSInteger)section

Хотя самый распространенный формат, который вы найдете, выглядит следующим образом:

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section

Редактировать: Похоже, что в последней части вопроса все еще есть некоторая путаница. Компонент селектора tableView: предназначен для предоставления экземпляра UITableView*, задающего вопрос. Все методы в протоколе UITableViewDataSource предоставляют отправку табличного представления в качестве аргумента. Некоторые из этих методов имеют другие аргументы, а некоторые нет. Те, у которых есть дополнительные аргументы, отформатированы как tableView:someOtherThing: (например, tableView:numberOfRowsInSection:), но это не обязательно. Его можно назвать numberOfRowsInTableView:forSection:, или numberOfRowsInSection:ofTableView:, или даже foo:bar:, но это был стилистический выбор, который был сделан разработчиком API для сохранения согласованной схемы именования, которая поможет как разработчику, так и человеку, читающему код позже. Что касается методов, которые не принимают никаких других параметров, они выглядят как numberOfSectionsInTableView:, потому что это просто естественное имя метода. Их нельзя назвать tableView:numberOfSections, потому что это недопустимый селектор (все компоненты после первого должны иметь связанный параметр и, следовательно, должны иметь завершающий :).

2 голосов
/ 04 января 2012

В каждом случае пользователю дается ссылка на tableView, который запрашивает данные или вызывает метод делегата

//                                                         |
//                                                         V
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView

//                                       |
//                                       V
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section

Таким образом, если у вас есть один datasource / delegateобъект, отвечающий за несколько UITableView, вы можете различить, какой из них запрашивает данные / вызывает метод.

Это довольно распространенный шаблон.

Если выпри использовании UITableViewController существует вероятность того, что вы все равно проигнорируете параметр tableView, так как обычно вы имеете дело только с одним UITableView

Причиной упорядочения параметров, например, является tableViewначало, вероятно, предпочтительнее, и оно читается лучше, когда имеется несколько параметров, однако, если у вас есть только параметр tableView, он должен быть последним.

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