0

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

这是我正在实施的一种方法的不完整示例。spec它只是一个大的条件树,它应该返回一个由and的最终值组成的二元素数组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 更改为双精度,并且根本不必重新调整此方法。

谢谢。

4

1 回答 1

3

你会遇到的问题是 NSArrays 不能直接处理doubles. 但是,如果您开始使用 NSNumber 实例,则可以解决此问题 - 您可以返回NSArray *包含 anNSString *和 anNSNumber *的没有问题。如果您需要更通用的类型,Objective-C 类型id可以用于任何对象实例(尽管仍然不能用于原语;您不能创建doublean id)。

稍后,当你得到一个数组时,你可以使用 NSObject 方法-isKindOfClass:来确定你从数组中拉出的对象的类型,并根据结果类型处理字符串或数字。如果您需要将您的 NSNumber 转换回双精度,只需使用 NSNumber 实例方法-doubleValue来拆箱您的双精度。(+[NSNumber numberWithDouble:]反过来,给你一个 NSNumber 出双倍。)

如果你使用的是最新版本的 Xcode,你甚至可以将这些东西变成文字,而不必到处乱扔调用+numberWithDouble:

return @[ @3, @"number of things" ]
于 2012-09-01T00:01:30.760 回答