iOS Obj-C:可以指定为double或字符串的变量对象?

时间:2012-08-31 23:52:45

标签: iphone methods nsarray

我对iOS开发很陌生,我想弄清楚是否有一个很好的方法来处理这个问题。基本上,我正在制作一个技术计算器,它根据用户输入参数返回一些产品规格。有问题的产品有一些但不是所有用户参数的规格,所以我。在常量文件中,我有一堆ATTEN_SPEC_X变量,const doubleconst NSString *。现在,错过一个规范是完全可以的,所以我的计划是利用NSArray的能力来保存不同的类型,并在我报告返回的规范之前使用内省来处理字符串与双打。

这是我实施的一种方法的不完整示例。它只是一个大的条件树,应该返回最终值为specnominal的双元素数组。

- (NSArray *)attenuatorSwitching:(double *)attenuator{
double spec, nominal;
{...}
    else if (*attenuator==0){
        spec=ATTEN_SPEC_3;     //this atten spec is a string!
        nominal=ATTEN_NOM_3;
    }
{...}
return {array of spec, nominal} //not actual obj-c code

因此,我可以将它们设为其他一般类型,而不是制作规格和名义双打吗?这里真正重要的是我不想在这种方法中使用任何特殊处理; 另一个编码器应该能够返回到常量文件,将ATTEN_NOM_3更改为double,而不必重新调整此方法。

感谢。

1 个答案:

答案 0 :(得分:3)

您遇到的问题是NSArrays无法直接处理double。但是,如果您开始使用NSNumber实例,则可以解决此问题 - 您可以返回包含NSArray *NSString *的{​​{1}}而没有任何问题。如果您需要更一般的输入,Objective-C类型NSNumber *可以用于任何对象实例(但仍然不能使用基元;您不能使id成为double

稍后,当您获得一个数组时,您可以使用NSObject方法id来确定您从数组中拉出的对象的类型,并根据结果类型处理字符串或数字。如果需要将NSNumber转换回double,只需使用NSNumber实例方法-isKindOfClass:来取消双击。 (-doubleValue走另一条路,给你一个双倍的NSNumber。)

如果您使用的是最新版本的Xcode,您甚至可以将这些内容改为文字,而不必在整个地方打电话给+[NSNumber numberWithDouble:]

+numberWithDouble: