Как уже писал mouviciel, это способ сделать это. Когда я пишу что-то вроде этого, я обычно делаю код короче, используя простой макрос:
#define FBOX(x) [NSNumber numberWithFloat:x]
Затем вы можете переписать код следующим образом:
NSArray *fatArray = [NSArray arrayWithObjects:
FBOX(6.9), FBOX(4.7), FBOX(6.6), FBOX(6.9), nil];
Макросы - это зло, но в этом случае макрос настолько прост, что я бы использовал его. К тому же, код немного больно читать, особенно если определение макроса не так уж далеко.
Если вы написали много такого кода, вы могли бы создать категорию с пользовательским инициализатором с переменным числом float
аргументов, но тогда возникла проблема с завершением списка аргументов. Сначала вы можете передать общее количество поплавков:
- (id) initWithFloats: (int) numFloats data: (float) float1, ...;
Но подсчет аргументов вручную может привести к ошибке. Или вы можете использовать некоторое значение часового типа, например, ноль, которое будет обозначать конец списка аргументов, но это открывает совершенно новую банку червей, называемую сравнением с плавающей точкой.
Обратите внимание, что в настоящее время вы можете просто написать следующее:
NSArray *list = @[@6.9, @4.7, @6.6, @6.9];
Это не мечта синтаксиса, но она официально поддерживается компилятором и намного лучше, чем предыдущие решения. См. Документацию для большего совершенства .