我对iOS开发很陌生,我想弄清楚是否有一个很好的方法来处理这个问题。基本上,我正在制作一个技术计算器,它根据用户输入参数返回一些产品规格。有问题的产品有一些但不是所有用户参数的规格,所以我。在常量文件中,我有一堆ATTEN_SPEC_X变量,const double
或const NSString *
。现在,错过一个规范是完全可以的,所以我的计划是利用NSArray的能力来保存不同的类型,并在我报告返回的规范之前使用内省来处理字符串与双打。
这是我实施的一种方法的不完整示例。它只是一个大的条件树,应该返回最终值为spec
和nominal
的双元素数组。
- (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,而不必重新调整此方法。
感谢。
答案 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: