正如 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];
这不是语法梦想成真,但它得到了编译器的官方支持,并且比以前的解决方案要好得多。请参阅文档以了解更多优点 http://clang.llvm.org/docs/ObjectiveCLiterals.html.