如何创建浮点值的 NSMutableArray
-
20-08-2019 - |
题
我是 Objective-C 和 iPhone 开发的新手,我正在尝试将浮点值存储在 NSMutableArray 中,但是当我这样做时,我收到一条错误消息“'addObject 的参数 1 的类型不兼容”。我究竟做错了什么?我正在尝试创建一个可以用来执行数学计算的双精度数组。
解决方案
的NSMutableArray仅保持对象,所以要与NSNumber的对象被加载的阵列。 创建每个NSNumber的握住你的双然后将其添加到您的阵列。也许是这样的。
NSMutableArray *array = [[NSMutableArray alloc] init];
NSNumber *num = [NSNumber numberWithFloat:10.0f];
[array addObject:num];
根据需要重复。
其他提示
使用 NSNumber 来包装您的浮点数,因为字典需要一个对象:
[myDictionary setObject:[NSNumber numberWithFloat:0.2f] forKey:@"theFloat"];
/* or */
[myDictionary setObject:@0.2f forKey:@"theFloat"];
通过发送 floatValue 来检索它:
float theFloat = [[myDictionary objectForKey:@"theFloat"] floatValue];
代码未经测试。
您也可以在 NSNumber 中包装许多其他数据类型,请检查 文档. 。还有 NS值 对于一些结构,如 NSPoint 和 NSRect。
在可可,所述的NSMutableDictionary(和所有集合,真的)需要对象作为值,所以不能简单地传递任何其它数据类型。由于两个sjmulder和Ryan建议,您可以在其他对象的NSNumber(对数)和NSValue的情况下,包装你的标值。
如果您代表的是十进制数,这样的事情有代价的,我也建议寻找和使用的 NSDecimalNumber 。然后,您就可以避免浮点不准确的问题,你通常可以使用和存放“值”为的 NSDecimalNumber 代替代码与原始的代表它。
例如:
// somewhere
NSDecimalNumber* price = [[NSDecimalNumber decimalNumberWithString:@"3.50"] retain];
NSMutableArray* prices= [[NSMutableArray array] retain];
// ...
[prices addObject:price];
NSMutableArray *muArray = [[NSMutableArray alloc] init];
NSNumber *float = [NSNumber numberWithFloat:210.0f];
NSNumber *float1 = [NSNumber numberWithFloat:211.0f];
[muArray addObject:float];
[muArray addObject:float1];
NSlog(@"my array is--%@",muArray);
不隶属于 StackOverflow