ObjectiveC: что-то между возвращаемым значением и именем метода - PullRequest
0 голосов
/ 28 ноября 2011

Я пытаюсь понять значение этого «чего-то» перед именем метода в objC.Вот пример:

- (BOOL)peoplePickerNavigationController:(ABPeoplePickerNavigationController *)peoplePicker 
      shouldContinueAfterSelectingPerson:(ABRecordRef)person 
                                property:(ABPropertyID)property 
                              identifier:(ABMultiValueIdentifier)identifier

Имя метода shouldContinueAfterSelectingPerson, метод имеет три параметра и имеет возвращаемое значение (BOOL), но какова роль peoplePickerNavigationController:(ABPeoplePickerNavigationController *)?

Это не возвращаемое значение, это не параметр метода (потому что он предшествует имени метода), и что это такое?

Ответы [ 7 ]

2 голосов
/ 28 ноября 2011

В задаче c метод разбит на 4 компонента (или, как я догадываюсь, так я это вижу)

Я разбью этот метод:

- (BOOL)peoplePickerNavigationController:(ABPeoplePickerNavigationController *)peoplePicker 
      shouldContinueAfterSelectingPerson:(ABRecordRef)person 
                                property:(ABPropertyID)property 
                              identifier:(ABMultiValueIdentifier)identifier

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

(BOOL) означает, что он должен вернуть BOOL, YES или NO.

метод определяется идентификатором uid, peoplePickerNavigationController:shouldContinueAfterSelectingPerson:property:identifier:

Это полное имя метода в отличие от того, что вы сказали.

последняя часть - параметры.Это довольно очевидно.

1 голос
/ 28 ноября 2011

На самом деле, в этом случае имя метода

peoplePickerNavigationController:shouldContinueAfterSelectingPerson:property:identifier:

И у него есть 4 аргумента.

Это особый случай, поскольку это метод протокола. Как правило, вы не вызываете / отправляете методы протоколов, они вызываются, и вы должны реализовать их для надлежащего реагирования на определенную ситуацию.

Как уже говорилось в других ответах, вам дают peoplePickerNavigationController, потому что это может быть случай, когда у вас есть различные контроллеры, и вы не хотите делать то же самое для всех них. :) Вы используете это, чтобы различать их.

Если бы вы вызывали этот метод самостоятельно, то первый аргумент был бы несколько избыточен (поскольку в большинстве случаев вы уже знаете эту информацию)

Надеюсь, это поможет.

0 голосов
/ 28 ноября 2011

Нет, имя метода (или, строго говоря, селектор):

peoplePickerNavigationController:shouldContinueAfterSelectingPerson:property:identifier:

Просто его первым параметром является контроллер навигации, отправляющий сообщение.Это делается для того, чтобы получатель знал, какой объект отправил сообщение.Это стандартная парадигма для методов делегата, поэтому один объект может быть делегирован для нескольких других объектов.

0 голосов
/ 28 ноября 2011

Предполагается, что вы говорите «в общем», а не конкретно об этом методе.

Ну, это все часть сигнатуры метода.Каждая часть с двоеточием (:) перед ней является строкой, которая является частью действующего имени метода.

0 голосов
/ 28 ноября 2011

Имя метода - peoplePickerNavigationController, а не «shouldContinueAfterSelectingPerson».Фактически, сигнатура метода peoplePickerNavigationController:shouldContinueAfterSelectingPerson:property:identifier:, потому что в именах / сигнатурах метода Objective-C содержатся все аргументы.

0 голосов
/ 28 ноября 2011

Имя метода не shouldContinueAfterSelectingPerson, а peoplePickerNavigationController:shouldContinueAfterSelectingPerson:property:identifier:, и оно принимает 4 аргумента.

0 голосов
/ 28 ноября 2011

Роль параметра peoplePickerNavigationController: - разрешить нескольким объектам ABPeoplePickerNavigationController использовать один экземпляр вашего объекта в качестве делегата.

И, таким образом, если имеется несколько объектов ABPeoplePickerNavigationController, вы будете знать, какой сборщик сделал выбор (и вызвал в ваш метод делегата).

Надеюсь, это поможет прояснить ваше замешательство!

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