Как уже писал мувицель, это способ сделать это. Когда я пишу что-то вроде этого, я обычно сделать код короче, используя простой макрос:
#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];
Это не синтаксис мечта сбылась, но это официально поддерживается компилятором, и это намного лучше, чем предыдущие решения. See the documentation for more goodness.
Большое спасибо – fuzzygoat
Сравнение с 0.0 не проблематично, но это часто не полезно. Мне нравится идея макроса. –