Objective C эквивалент сигнатуры метода C - PullRequest
0 голосов
/ 20 января 2012

Я хочу сделать функцию для включения в мой код для вычисления процентов.

В Php это:

function percent(a,b){
  return a/b*100;
}

В Цели С я не знаю. Я попробовал:

-(void)percent(a,b){
   return a/b*100;
}

Но есть 2 ошибки. Не могли бы вы объяснить, как это сделать?

Спасибо за помощь

Ответы [ 4 ]

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

Метод определен в несколько ином синтаксисе, чем вы привыкли:

- (float)percentWithA:(float)a dividedByB:(float)b
{
    return a / b * 100;
}

Параметры «разбросаны» по всему вызову метода. Например, имя этого метода будет percentWithA:dividedByB:. Однако вам не нужно быть таким явным, как этот вызов. Например, вы могли бы сделать это:

- (float)percent:(float)a :(float)b { /* ... */ }

Но это не дает много контекста.

1 голос
/ 20 января 2012

Более правильный способ сделать это будет:

- (float)precentageByDevidingFloat:(float)a byFloat:(float)b {
  float returnValue = 0; 
  if (b != 0)
    returnValue = a / b * 100;

  return returnValue;

}

Таким образом, вы используете более правильное соглашение об именах, вы фактически возвращаете число с плавающей запятой и ваш сейф в случае, если кто-то дал вам значение 0 в B. (что должно быть в документации)

1 голос
/ 20 января 2012

Вы также можете сделать это, используя функцию C:

// in your .h
float percent(float a, float b);

// in your .m or .c
float percent(float a, float b)
{
    return a / b * 100.0f;
}

Или, если вы занимаетесь макросами:

// remember to always enclose macros in parentheses
#define percent(a, b) (a / b * 100.0f)

И вы бы назвали это так:

percent(50, 20);
0 голосов
/ 20 января 2012

Objective-C использует странное соглашение о том, что имена параметров являются частью имени метода, и поэтому объявления параметров встроены в имя метода.

-(float)percentOf:(float)a over:(float)b 
{
    return (a/b) * 100.0;
}

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

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