Подтвердить что ты не робот

Функция Objective-C с параметрами по умолчанию?

Возможные дубликаты:
Необязательные аргументы в Objective-C 2.0?
Значение аргумента Objective-C по умолчанию

Я пишу функцию C в Objective-C. Я хочу значение по умолчанию для моего последнего параметра.

Я пробовал:

foo(int a, int b, int c = 0);

но это C++.

Я также попробовал:

foo(int a, int b, int c)
{
    ...
}

foo(int a, int b)
{
   foo(a, b, 0);
}

Но это также C++.

Есть ли способ сделать это в Objective-C вместо этого?

4b9b3361

Ответ 1

В ObjC нет параметров по умолчанию.

Вы можете создать 2 метода:

-(void)fooWithA:(int)a b:(int)b c:(int)c {
  ...
}
-(void)fooWithA:(int)a b:(int)b {
  [self fooWithA:a b:b c:0];
}

Для C: ничего особого не добавлено в подмножество C с помощью ObjC. Все, что невозможно сделать в чистом C, невозможно сделать, скомпилировав в ObjC. Это означает, что вы не можете иметь параметры по умолчанию и не перегружать функцию. Вместо этого создайте 2 функции.

Ответ 4

Для функции C - нет. Для метода класса Objective C - да, вы просто выполняете два метода, один из которых один параметр короткий, вызывая другой метод.

Или вы можете переименовать свои источники в функции .mm и C, магически стать С++.

Ответ 5

Вы можете написать функцию C с списком аргументов переменной длины. Вы можете использовать "..." в качестве типа данных для одной из ваших объявленных параметров функции, чтобы указать, где в списке параметров начинается список аргументов переменных. (Это позволяет вам иметь один или несколько требуемых аргументов перед началом списка.)

printf() - это пример функции, которая записывается с использованием этого средства (так называемые varargs).

printf(const char *restrict format, ...);

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

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