Функция 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 вместо этого?
Ответы
Ответ 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 функции.
Ответ 2
Нет, objective-c не поддерживает параметры по умолчанию. См. аналогичный вопрос
Ответ 3
Определите несколько методов:
Дополнительные аргументы в Objective-C 2.0?
Ответ 4
Для функции C - нет. Для метода класса Objective C - да, вы просто выполняете два метода, один из которых один параметр короткий, вызывая другой метод.
Или вы можете переименовать свои источники в функции .mm и C, магически стать С++.
Ответ 5
Вы можете написать функцию C с списком аргументов переменной длины. Вы можете использовать "..." в качестве типа данных для одной из ваших объявленных параметров функции, чтобы указать, где в списке параметров начинается список аргументов переменных. (Это позволяет вам иметь один или несколько требуемых аргументов перед началом списка.)
printf() - это пример функции, которая записывается с использованием этого средства (так называемые varargs).
printf(const char *restrict format, ...);
Здесь требуется первый аргумент, а затем может следовать ноль или более дополнительных аргументов.
Если вы написали свою функцию таким образом, она может предоставить значение по умолчанию для отсутствующего параметра.