Не понимаю несколько объявлений параметров в target-c - PullRequest
5 голосов
/ 12 июня 2010

Может кто-нибудь уточнить это для меня:

При наличии более одного аргумента аргументы объявляются в имени метода после двоеточий. Аргументы разделяют имя в объявлении, как в сообщении. Например:

- (void)setWidth:(float)width height:(float)height;

Итак, в приведенном выше:

  1. метод для переменных экземпляра
  2. возвращает недействительным
  3. параметр # 1 - это число с плавающей точкой с именем width.
  4. параметр # 2 - это число с плавающей точкой с именем height.

Но почему это высота: (плавающая) высота; и не только:

- (void)setWidth: (float)width (float)height;

Ответы [ 3 ]

6 голосов
/ 12 июня 2010

Objective-C не имеет именованных аргументов . У него также нет «аргументов по ключевым словам».

Objective-C использует так называемые чередующиеся аргументы. То есть имя метода чередуется с аргументами, чтобы создать более наглядный и читаемый код.

[myObject setWidth:w height:h];

Выше приведено эффективное чтение, как говорит myObject установить ширину w и высоту h .

В приведенном выше случае имя метода - его селектор - в точности равно setWidth:height:. Не больше, не меньше.

Все это объясняется в Руководстве по Objective-C .

2 голосов
/ 12 июня 2010

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

[myObject setWidth:w height:h];

Вы можете оставить метки (кроме первой), поэтомуесли вы действительно хотите, вы можете иметь:

-(void)setWidth:(float)width :(float)height
{
  ...
}

и использовать его как:

[myObject setWidth:w :h];

Но это не совсем в духе цели.С языком.Весь смысл этих меток состоит в том, чтобы облегчить понимание этих вызовов без необходимости искать определение метода.

1 голос
/ 12 июня 2010

Тот факт, что имя аргумента также присутствует в имени метода, сбивает вас с толку. Подумайте, как вы на самом деле это называете:

[something setWidth:500 height:250];

Следуя вашему предложению, это было бы что-то вроде этого:

[something setWidth:500 250]; // That 250 is just kind of hanging 
                              // out there — not very readable

Вы также можете дать аргументу совершенно другое имя, чем часть имени метода, которая предшествует ему:

- (void)setGivenName:(NSString *)first surname:(NSString *)last
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...